一步一步复习数据结构和算法基础-插入排序(2)

来源:互联网 发布:在淘宝roi ppc是什么 编辑:程序博客网 时间:2024/06/05 02:26

希尔排序:

将整个待排记录分割为若干子序列,最后用直接插入排序。

这样可以使关键字比较小的记录跳跃式向前移动。最后直接插入排序的时候数组以基本有序。

#include<stdio.h>#include<stdlib.h>int list[4] = {7,5,3,1};//增量表int t=4;//增量个数void ShellInsert(int *array,int length,int dk){//和插入排序的区别就是增量由1变为dkint i,k;for(i=dk+1;i<=length;i++){if(*(array+i) < *(array+i-dk)){//*array作为监视哨*array = *(array+i);for(k=i-dk;k>0&&(*array < *(array+k));k-=dk)*(array+dk+k) = *(array+k);*(array+k+dk)=*array;}}}void ShellSort(int *array,int length){int k;//对每个增量调用一次函数for(k=0;k<t;k++)ShellInsert(array,length,list[k]);}int main(){int i,length;int *array;scanf("%d",&length);array = (int*)malloc(sizeof(int)*(length+1));if(!array)exit(1);for(i=1;i<=length;i++)scanf("%d",array+i);ShellSort(array,length);for(i=1;i<=length;i++)printf("%d ",*(array+i));printf("\n");free(array);return 0;}