希尔排序(shellsort)

来源:互联网 发布:javascript库 编辑:程序博客网 时间:2024/05/23 18:29

希尔排序(shellsort)首先在概念上是一种经过改进的插入排序方法,实际上就是分组插入排序或者说是缩小增量排序。

  先给出具体的C语言算法实现,如下:

void shellsort(int *a,int n){int i, j;int r;int temp;for (r = n / 2; r >= 1;r/=2) //分序列{for ( i = r; i < n; i++)//从中间处开始进行比较交换{temp = a[i];j = i - r; //j的初始值while (j>=0&&temp<a[j]){a[j + r] = a[j];//j+r=i-r+r=i(实质)j -= r; //j=j-r=i-r(实质)}a[j + r] = temp;//j+r=i-r+r=i(实质)}}}


从方法上来讲,希尔排序其实就是先将待排序的序列分成无数个子序列,而这些子序列之间往往相隔“增量”,一开始增量较大,我们在子序列中采取直接插入的方法排序,待结束后再逐次的减少增量的个数并继续在新的序列中执行直接插入操作,当经过数次增量递减的过程后,增量最终为一,插入操作结束后,排序结束。

应该注意到,每次增量减少时,意味着每个分组中的元素个数是增加的,相对应的,需要执行操作的组数减小但每组中比较的次数相应增加。

0 0
原创粉丝点击