插入排序及希尔排序

Posted CppTeam

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了插入排序及希尔排序相关的知识,希望对你有一定的参考价值。

数据结构与算法

插入排序

  1. 插入排序算法介绍:插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的

  2. 插入排序法思想插入排序(Insertion  Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。

  3. 插入排序思路图

  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时,整个文件恰被分成一组,算法便终止

实现思想

从所有分组的第一个分组的第二个元素开始往后遍历,每个分组的元素的下层遍历只与自己所在分组的元素进行比较


以上是关于插入排序及希尔排序的主要内容,如果未能解决你的问题,请参考以下文章

插入排序及希尔排序

算法3 七大排序之:直接插入排序和希尔排序

8种面试经典排序详解--选择,插入,希尔,冒泡,堆排,3种快排及非递归,归并及非递归,计数(图+C语言代码+时间复杂度)

8种面试经典排序详解--选择,插入,希尔,冒泡,堆排,3种快排及非递归,归并及非递归,计数(图+C语言代码+时间复杂度)

小橙书阅读指南——希尔排序及改进算法

七大排序算法