希尔排序

来源:互联网 发布:mac卸载 landesk 编辑:程序博客网 时间:2024/06/11 22:55

希尔排序是对简单插入排序进行了该进

先回顾一下插入排序

void insertsort(int *ARRAY,int size){   int temp;   for(int i=1;i<size;i++){      temp=ARRAY[i];      int j=i;      while(j>0&&temp<ARRAY[j-1]){         ARRAY[j]=ARRAY[j-1];         j--;      }      ARRAY[j]=temp;   }}
每次将一个元素插入到一个有序序列中的合适位置,这个有序序列初始情况为空。

插入排序每次跳跃长度为1,希尔排序通过在最外层增加一层循环来控制跳跃长度变化,使得局部有序减少运算,算法最优时间复杂度趋近O(nlogn),关于跳跃量的缩进和最佳效率似乎没有什么研究给出过具体答案。
代码:

#include<iostream>using namespace std;typedef int any;const int interval=10;any p[10000];void sheelsort(any *ARRAY,int size){   int k=size/interval;   any temp;   while(1){      for(int i=k;i<size;i+=k){         temp=ARRAY[i];         int j=i;         while(j>=k&&temp<ARRAY[j-k]){            ARRAY[j]=ARRAY[j-k];            j-=k;         }         ARRAY[j]=temp;      }      if(k==1)break;      else k=k/interval+1; //终止条件为跳跃量为1的时候,所以+1以保证一定会出现1   }}int main(){   for(int i=0;i<10000;i++)p[i]=rand();   sheelsort(p,10000);   for(int i=0;i<10000;i++)cout<<p[i]<<endl;}


原创粉丝点击