C/C++教程

C笔记 - 算法:希尔排序

本文主要是介绍C笔记 - 算法:希尔排序,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

希尔排序

1 - 1959 年 Shell 发明的第一个突破 O(n2) 的排序算法,是简单插入排序的改进版。它与插入排序的不同之处在于它会优先比较距离较远的元素

2 - 希尔排序又叫缩小增量排序,它通过比较相距一定间隔的元素来进行,各趟比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止

① 第一趟,gap = length/2 = 4

② 第二趟,增量缩小为 2

③ 第三趟,增量缩小为 1,得到最终排序结果

3 - 代码示例

 1     // 数组
 2     int array[] = {12,91,21,10,13};
 3     int length = sizeof(array)/sizeof(array[0]);// 5 个元素
 4     
 5 
 6     // 最外层控制增量,循环缩小
 7     for (int gap = length/2; gap > 0; gap = gap/2) {
 8       
 9         // 中间控制需要遍历的趟数:趟数 + gap = length
10         // 如 gap = 1,需遍历 4 趟;  gap = 2;需要遍历 3 趟.......
11         for (int i = gap; i < length; i++) {
12             
13             
14             printf("----- gap = %d 第 %d 趟 ------\n\n",gap,i-gap +1);
15             int j = i;
16             int current = array[i];
17             
18             while (j - gap >= 0 && current < array[j - gap]) {
19                  array[j] = array[j - gap];
20                  j = j - gap;
21             }
22             array[j] = current;
23             
24             int n = 0;
25             while (n < length) {
26                 printf("%d\t",array[n]);
27                 n++;
28             }
29             printf("\n\n");
30         }
31         
32     }

日志打印

 

这篇关于C笔记 - 算法:希尔排序的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!