1、算法改进要点:直接插入排序法,在待排序的关键字序列基本有序且关键字个数n较少时,其算法的性能最佳。希尔排序又称为缩小增量排序法,是一种基于插入思想的排序方法,他利用了直接插入排序的最佳性能,首先将待排序的关键字序列分成若干个较小的子序列上,对子序列进行直接插入排序,使整个整个待排序序列排好序,在时间耗费上,比较直接插入排序法的性能有较大的改进,然后,在进行直接插入排序时,若待排序记录序列已经有序,直接插入排序的时间复杂度可以提高到O(n)。
C语言实现:
- void shell_sort(int array[], int length){
- int i;
- int j;
- int k;
- int gap; //gap是分组的步长
- int temp; //希尔排序是在直接插入排序的基础上实现的,所以仍然需要哨兵
- for(gap=length/2; gap>0; gap=gap/2){
- for(i=0; i<gap; i++){
- for(j=i+gap; j<length; j=j+gap){ //单独一次的插入排序
- if(array[j] < array[j - gap]){
- temp = array[j]; //哨兵
- k = j - gap;
- while(k>=0 && array[k]>temp){
- array[k + gap] = array[k];
- k = k - gap;
- }
- array[k + gap] = temp;
- }
- }
- }
- }
- }