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     }
复制代码

日志打印

 

posted on   低头捡石頭  阅读(50)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2018-04-13 UI基础 - UIBezierPath:FillMode
2018-04-13 UI基础 - UIBezierPath:反转路径 | 虚线
2018-04-13 UI基础 - UIBezierPath 常用API
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示