排序算法(C实现)------- 希尔排序

来源:互联网 发布:美国非农数据何时公布 编辑:程序博客网 时间:2024/04/29 09:58

        希尔排序的思想是按照一个递减的方法进行排序,其本质是分组插入排序,举例:如有9个待排序数,取初始步长为5,按照5,3,1 的递减顺序进行排序,每一轮即将位置1和位置6,位置2和位置7,位置3和位置8,位置4和位置9进行排序;第二轮步长为3,则将位置1,4,7,位置2,5,8,位置3,6,9分别进行排序;第三轮则步长为1,则和一般的排序一样,不过经过前两轮,数据已局部有序,故可以采用交换次数少的冒泡排序,当然了其他的排序也可以。

        代码如下:

//step为初始步长,取奇数void shell_sort(ElemType array[],int length,int step){int inner,outer,median;int i,j;if(array == NULL || length == 0)exit(0);//步长每次减2,直到变为1for(; step >= 1; step-=2){for(i = 0; i < step; i++){//取出最后一个元素下标outer = i;while((outer + step) <= (length -1)){outer += step;}//对相应位的元素进行排序,采用冒泡排序 for(; outer >= (i + step);outer -= step){for(inner = i; inner < outer; inner += step){if(array[inner] > array[inner+step]){median = array[inner];array[inner] = array[inner+step];array[inner+step] = median;}}}}}}


 

0 0