希尔排序及其优化

来源:互联网 发布:淘宝舞帝商城 编辑:程序博客网 时间:2024/06/07 13:03

希尔排序的本质就是分组插入排序,希尔排序也叫缩小增量排序。

该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的 元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高。

void ShellSort1(int* array,int n){       if(array==NULL||n<1)              return;       for(intgrap=n/2;grap>0;grap/=2)       {              for(inti=0;i<grap;i++)              {                     for(intj=i+grap;j<n;j+=grap)                     {                            if(array[j]<array[j-grap])                            {                                   intk=j;                                   intkey=array[k];                                   while(k>=grap&&array[k-grap]>key){                                          array[k]=array[k-grap];                                          k-=grap;                                   }                                   array[k]=key;                            }                     }              }       }}


 

void ShellSort2(int* array,int n){       if(array==NULL||n<1)              return;       for(intgrap=n/2;grap>0;grap/=2)       {              for(inti=grap;i<n;i++)              {                     if(array[i]<array[i-grap])                     {                            intkey=array[i];                            intk=i;                            while(k>=grap&&array[k-grap]>key)                            {                                   array[k]=array[k-grap];                                   k-=grap;                            }                            array[k]=key;                     }              }       }}


0 0
原创粉丝点击