插入排序及希尔排序
Posted CppTeam
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了插入排序及希尔排序相关的知识,希望对你有一定的参考价值。
数据结构与算法
插入排序
插入排序算法介绍:插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的
插入排序法思想插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。
插入排序思路图
插入排序代码实现:
// 插入排序
public static void insertSort(int[] arr) {
int insertVal;
int indexPrevious;
for (int i = 0; i < arr.length - 1 ; i++) {
insertVal = arr[i+1]; // 待插入的值
indexPrevious = i; // 待插入值的前一个索引
// 若待插入值比前一个值小或者前一个索引未越界,则将前一个值后移,并将前一个索引前移
while (indexPrevious >= 0 && insertVal < arr[indexPrevious]) {
// 前一个值后移
arr[indexPrevious+1] = arr[indexPrevious];
// 前一个索引前移,继续与待插入值进行比较
indexPrevious--;
}
// 退出while循环,证明待插入值大于前一个值或者没有前一个值
if (indexPrevious + 1 != i + 1) {
// 越界时会多减1
arr[indexPrevious + 1] = insertVal; // indexPrevious是前一个位置,元素比前一个值大,应该插入到前一个值的后一个位置
}
// System.out.println("第" + (i+1) + "轮排序后:" + Arrays.toString(arr));
}
}
希尔排序
希尔排序法介绍
希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后一个更高效的版本,成为缩小增量排序。
希尔排序法基本思想
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止
实现思想
从所有分组的第一个分组的第二个元素开始往后遍历,每个分组的元素的下层遍历只与自己所在分组的元素进行比较
以上是关于插入排序及希尔排序的主要内容,如果未能解决你的问题,请参考以下文章
8种面试经典排序详解--选择,插入,希尔,冒泡,堆排,3种快排及非递归,归并及非递归,计数(图+C语言代码+时间复杂度)
8种面试经典排序详解--选择,插入,希尔,冒泡,堆排,3种快排及非递归,归并及非递归,计数(图+C语言代码+时间复杂度)