[数据结构] 希尔排序 C语言程序
//由小到大 //希尔排序 void shellSort( long int array[], int length) { int i; int j; int k; int gap; //gap是分组的步长 long int temp; //希尔排序是在直接插入排序的基础上实现的,所以仍然需要哨兵 for(gap=length/2; gap>0; gap=gap/2) { //以GAP为间隔分组 for(i=0; i<gap; i++) { /* 每一组做插入排序 */ for(j=i+gap; j<length; j=j+gap) { //如果当前元素比这一组中的前一个元素要小 if(array[j] < array[j - gap]) { //记录当前这个更小的元素 temp temp = array[j]; //哨兵 k = j - gap; //把这一组中之前所有比temp小的元素都往后挪一个位置 while(k>=0 && array[k]>temp) { array[k + gap] = array[k]; k = k - gap; } //把挪出来的空位,放入temp array[k + gap] = temp; } } } } }