算法 - 希尔排序(C)
来源:互联网 发布:魔兽7.0数据库app 编辑:程序博客网 时间:2024/06/15 00:58
/*ShellSort.c - by Chimomo希尔排序又称“缩小增量排序”,是对直接插入排序的改进。希尔排序的基本思想是:先将整个待排序序列分割成若干子序列,然后分别进行直接插入排序,待整个序列中的记录基本有序时,再对全体记录进行一次直接插入排序。具体做法是:先取一个小于n的整数d1作为第一个增量,将所有距离为d1倍数的记录放在同一个组中,从而把全部记录分成d1组,在各组内进行直接插入排序;然后取第二个增量d2(d2<d1),重复上述分组和排序工作;依此类推,直至所取的增量di=1(di<...<d2<d1),即所有记录放在同一组进行直接插入排序为止。希尔排序是不稳定的排序算法。*/void ShellSort(int data[], int n){ int *delta, k, i, t, dk, j; /*从k = n开始,重复k = k / 2运算,直到k = 0,所得k值的序列作为增量序列存入delta*/ k = n; delta = (int *)malloc(sizeof(int) * (n / 2)); i = 0; do { k /= 2; delta[i++] = k; } while(k > 0); i = 0; while((dk = delta[i]) > 0) { for(k = delta[i]; k < n; ++k) { /*将元素data[k]插入到有序增量子表中*/ if(data[k] < data[k - dk]) { /*备份待插入的元素,空出一个元素位置*/ t = data[k]; for(j = k - dk; j >= 0 && t < data[j]; j -= dk) { /*寻找插入位置的同时元素后移*/ data[j + dk] = data[j]; } /*找到插入位置,插入元素*/ data[j + dk] = t; } } /*取下一个增量值*/ ++i; printf("Round %d: ", i); int x = 0; for(; x < n; x++) { printf("%d ", data[x]); } printf("\r\n"); }}
/*Main.c - by Chimomo*/main(){ int i, a[] = { 1, 6, 4, 2, 8, 7, 9, 3, 10, 5 }; printf("Before Shell Sort:\r\n"); for(i = 0; i < 10; i++) { printf("%d ", a[i]); } printf("\r\n\r\n"); printf("In Shell Sort:\r\n"); ShellSort(a, 10); printf("\r\nAfter Merge Sort:\r\n"); for(i = 0; i < 10; i++) { printf("%d ", a[i]); } printf("\r\n");}// Output:/*Before Shell Sort:1 6 4 2 8 7 9 3 10 5In Shell Sort:Round 1: 1 6 3 2 5 7 9 4 10 8Round 2: 1 2 3 4 5 6 9 7 10 8Round 3: 1 2 3 4 5 6 7 8 9 10After Merge Sort:1 2 3 4 5 6 7 8 9 10*/
1 0
- 算法 - 希尔排序(C)
- 排序算法(C实现)------- 希尔排序
- 排序算法系列---希尔排序(C++)
- 希尔排序算法实现(C++)
- 希尔排序算法实现(C++)
- 算法实现之希尔排序(C++)
- 经典排序算法---希尔排序(C/C#)
- C 语言算法排序 希尔
- 排序算法之希尔排序(C/C++)
- C语言--------排序算法---------希尔排序(二)
- C Tips: 排序算法:希尔排序(Shell sorting)
- 八大排序算法之二希尔排序(C语言)
- 排序算法之希尔排序(C语言实现)
- 希尔排序(c++)
- 排序:希尔排序(算法)
- 排序算法c语言描述---希尔排序
- C语言实现排序算法---希尔排序
- 【大话数据结构&算法】希尔排序(Java/C实现源码)
- hotspot 虚拟机的server和client模式
- WiFi小车记录一:基本构思
- eclipse无法进入调试模式解决办法
- 设计模式之策略模式、观察者模式浅析
- HDU 5115 Dire Wolf (2014ACM亚洲区域赛北京赛区重现)D
- 算法 - 希尔排序(C)
- 不懂编程也可以开发网站
- hdu1312Red and Black(搜索DFS)
- java md5算法
- sqlite3 编译
- First
- Subqueries
- Android四大组件回顾汇总
- java 验证码生成器