希尔排序

it2026-01-11  6

void shellSort(int *arr,int Length){ int temp; for(int gap=Length/2; gap>0;gap/=2){ for(int i=0;i<gap; i++){ for(int j=gap+i;j<Length;j+=gap){ temp=arr[j]; int k=j-gap; while(k>=0&&arr[k]>temp){ arr[k+gap]=arr[k]; k-=gap; } arr[k+gap]=temp; } } }} 上面的希尔排序很简单:      该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高。     for(int gap=Length/2; gap>0;gap/=2) 这是是设置不同的步长进行排序,每次步长除2. for(int i=0;i<gap; i++) 这是对每组进行排序,如第一次分成两组,步长就是gap=10/2=5 则有了5组了。 for(int j=gap+i;j<Length;j+=gap){ temp=arr[j]; int k=j-gap; while(k>=0&&arr[k]>temp){ arr[k+gap]=arr[k]; k-=gap; } arr[k+gap]=temp; } 组内进行插入排序。 来自为知笔记(Wiz)

转载于:https://www.cnblogs.com/yml435/p/4655556.html

相关资源:数据结构—成绩单生成器
最新回复(0)