希尔排序算法,C语言示例代码详解
- 复杂性和稳定性
算法时间复杂度
最坏情况:O(n^2)
最好情况:O(n) : O(n ^2 )
稳定性:排序不稳定
2。流程介绍
希尔排序又称为降序增量排序算法,是一种不稳定但效率更高的插入排序在操作近排序数据时效率极高,即可以达到线性排序的效率。直接插入排序总体上效率较低,因为插入排序一次只能移动数据一步。少量;
希尔排序的基本思想是:首先将整个待排序记录序列分割成若干子序列进行直接插入排序。当整个序列中的记录“基本有序”时,那么所有记录都已排序。直接插入排序。
过程如下:
- 选择一个增量序列t1,t2,...,tk,其中ti > tj,tk = 1;
- 根据增量序列数k对序列进行k次排序;
- 在每次排序过程中,将待排序的列按照对应的增量十分成若干个长度为m的子序列,并对每个子表进行直接插入排序。只有当增量因子为1时,才将整个序列视为一个表,表的长度就是整个序列的长度。
- 流程图示
| 第一遍 | 10 | 50 | 30 | 20 | 70 | 70 | 40 | 60 |
| 第二遍 | 10 | 20 | 30 | 50 | 40 | 60 | 70 | 70 |
| 第三遍 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 70 |
| 第四遍 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 70 |
可以看到,与直接插入pass相比,每遍都可以进行分段操作,整体效率较高。
4。相关代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include using namespace std; void shellSort(int arr[], int n) { int i, j, gap; = n / 2;间隙 > 0;间隙/= 2) { 对于 (i = 0; i 对于 (j = i + 间隙; j -间隙], arr[k]); 0.30, 20,10,70,40 ,60}; int n=8; shellSort(a,n); for (int i=0; i |
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
上一篇:直接插入排序算法,C语言代码实例详解 下一篇:栈序算法,C语言代码示例详细解释
code前端网