希尔排序:
希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,核心思想:
把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。
举例:
java代码:
public static void shellSort(int arr[]){
int temp;
for (int gap = arr.length/2;gap>0;gap/=2){//步长从arr.length()/2开始即先将数组两两分为一组进行排序,直至步长为1完成最终的排序。
for(int i = gap;i<arr.length;i++){ //第一个元素无需排序,从每组的第二个元素开始进行插入排序。
int j = i;
temp=arr[j];
if (arr[j]<arr[j-gap]){//如果当前元素比前一个元素小的话则进行插入排序。
while (j-gap>=0&&temp<arr[j-gap]){//找到合适的插入位置
arr[j]=arr[j-gap];
j-=gap;//用前一位置的值替换后一位置的值
}
arr[j]=temp;//将值填入相应的位置。
}
}
}
}
参考韩顺平-数据结构与算法 视频链接 https://www.bilibili.com/video/BV1E4411H73v?p=63