排序算法之希尔排序

来源:互联网 发布:java重载返回值c# 编辑:程序博客网 时间:2024/05/23 02:00
希尔排序

希尔排序又称为缩小增量排序,是一种插入排序,是直接插入排序的升级版。

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

void shellSort(int num[],int n){int gap = n;int temp;int i,j;do{gap = gap/2;for(i = gap;i < n;i++){if(num[i] < num[i - gap]){temp = num[i];for( j = i - gap; j >=0;j-=gap){if(num[j] > temp) num[j + gap] = num[j ];else break;}num[j + gap] = temp;}}}while(gap > 1);}int main(){int i = 0;int num[]={10,9,8,7,6,5,4,3,2,1}; shellSort(num,10); for(i = 0; i < 10;i++) {printf("%d ",num[i]); } return 0;}
希尔排序是一种插入排序,是不稳定的。

 


0 0
原创粉丝点击