希尔排序

来源:互联网 发布:旅行团乐队知乎 编辑:程序博客网 时间:2024/06/10 15:31
#include<stdio.h>/**基于插入排序修改的希尔排序**/void InsertSort(int k[], int n){int i, j, temp;int gap = n; //本来跨度是一,现在我们将跨度变成n; 初始化为n。do{gap = gap/3 + 1;    for(i = gap; i< n; i++)  //将i=1修改为i=gap;     {    if (k[i]<k[i-gap]) //每次修改都是i-gap   {    temp = k[i];    for(j=i-gap; k[j]>temp; j -=gap) //前一个元素变成gap之前。如果temp元素小于gap之前那么就将     {    k[j+gap]=k[j];    }     k[j+gap] = temp;    }  }}while(gap >1);}int main()  {      int i, a[10] = {5,2,6,0,3,4,1,4,8};     InsertSort(a,10);      for(i = 0;i<10;i++)      {          printf("%d\n",a[i]);      }      return 0;  }  

希尔排序的画法是如何呢?

希尔排序仅仅是高级一点的插入排序而已。

考题上只直到画第一趟就OK了。按照增量来比较和插入排序一样! 

i = 1 增量是4 那么 j  = 5. 循环着排。

那么空间复杂度就是O(1)

时间复杂度 书上说的是n(log2n)^2

0 0
原创粉丝点击