如何确保纪念币商城网站的持续维护以保持竞争力?
摘要:纪念币商城网站建设,如何维护公司网站,网站内页权重怎么查,域名注册购买目录 1、排序的基本概念 2、直接插入排序 2.1 算法思想2.2 代码实现3、折半插入排序 3.1 算法思想 3.2 代码实现4、希尔排序 4.1 算法思想
纪念币商城网站建设,如何维护公司网站,网站内页权重怎么查,域名注册购买目录
1、排序的基本概念
2、直接插入排序
2.1 算法思想
2.2 代码实现
3、折半插入排序
3.1 算法思想
3.2 代码实现
4、希尔排序
4.1 算法思想
4..2 代码实现 1、排序的基本概念
排序是将一组数据按照预定的顺序排列的过程#xff0c;排序的基本概念包括以下内容…目录
1、排序的基本概念
2、直接插入排序
2.1 算法思想
2.2 代码实现
3、折半插入排序
3.1 算法思想
3.2 代码实现
4、希尔排序
4.1 算法思想
4..2 代码实现 1、排序的基本概念
排序是将一组数据按照预定的顺序排列的过程排序的基本概念包括以下内容 关键字排序时按照哪个字段进行排序该字段称为关键字。 排序规则排序时按照升序或降序的方式排列。升序表示从小到大排列降序表示从大到小排列。 稳定性排序算法如果经过排序后具有相同关键字的元素排序前后的相对顺序是否保持不变。如果保持不变该排序算法就是稳定的。 时间复杂度排序算法进行排序所需要的时间复杂度。 空间复杂度排序算法进行排序所需要的额外空间复杂度即算法需要占用的额外内存大小。 2、直接插入排序
2.1 算法思想 直接插入排序算法的思想是将待排序的元素插入到已经排好序的元素序列中从而得到一个新的、更大的有序序列。 具体来说算法从第二个元素开始遍历待排序序列将当前元素插入到已经排好的元素序列中的正确位置上使得插入后仍然保持有序。因为初始时已经有一个元素的有序序列所以排序过程中每次插入的元素都将比已经排好序的元素序列中的元素小因此不会影响已经排好序的元素序列的有序性。当遍历完整个序列待排序序列就被完全插入到已经排好序的元素序列中排序完成。 直接插入排序的时间复杂度为O(n^2)空间复杂度为O(1)。虽然时间复杂度较高但是对于小规模数据的排序效率较高并且具有稳定性。
2.2 代码实现
以下是C语言编写的直接插入排序并计数比较次数的程序
#include stdio.h
#define MAXSIZE 100void InsertionSort(int A[], int n, int *cnt) {int i, j, temp;for(i 1; i n; i) {temp A[i];for(j i - 1; j 0; j--) {(*cnt);if(A[j] temp)A[j 1] A[j];elsebreak;}A[j 1] temp;}
}int main() {int A[MAXSIZE];int n, cnt 0;printf(请输入待排序数列元素个数不超过%d, MAXSIZE);scanf(%d, n);printf(请输入待排序数列);for(int i 0; i n; i)scanf(%d, A[i]);InsertionSort(A, n, cnt);printf(排序后结果);for(int i 0; i n; i)printf(%d , A[i]);printf(\n比较次数%d\n, cnt);return 0;
}程序中的 InsertionSort 函数实现了直接插入排序并使用指针形参 cnt 对比较次数进行计数。主函数中首先输入待排序数列元素个数和数列元素然后调用 InsertionSort 函数进行排序并输出排序后的结果和比较次数。
下面是C语言在链式存储结构上设计直接插入排序算法的示例代码
typedef struct Node {int data;struct Node *next;
}Node;void insertSort(Node **head) {if (*head NULL || (*head)-next NULL) {return;}Node *p (*head)-next;(*head)-next NULL; // 设置新的有序链表头节点while (p ! NULL) {Node *q p-next;Node *prev NULL;Node *cur *head;while (cur ! NULL cur-data p-data) {prev cur;cur cur-next;}if (prev NULL) { // 插入到头节点之前p-next *head;*head p;} else { // 插入到prev和cur之间prev-next p;p-next cur;}p q;}
}此代码首先对链表的头节点进行判断若链表为空或只有一个节点则不需要排序。
