插入排序与希尔排序

Posted 躲在灌木丛里写博客

tags:

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

插入排序:

思路:

  1. 将数组看成有序和无序两部分

  2. 把无序的按顺序插入有序的部分

  3. 此处使用位移法,交换法用时长

代码实现:

//插入排序方法  public void insertSort() {  //外层循环从1开始 for (int i = 1; i < ary.length; i++) {    //保存数组无序部分的元素,内层循环结束后与有序部分交换 int val=ary[i]; int num=i-1; while (num>=0&&val<ary[num]) {      //通过循环找到插入位置,再进行向后位移使无序变为有序 ary[num+1]=ary[num]; num--; } ary[num+1]=val; } }

希尔排序:

思路:

  1. 将数组分成前后两部分

  2. 前后部分相比前半部分都小于后半部分

  3. 一次缩小中间值直到中间值为零

代码实现:

 //希尔排序方法  public void shellSort() {  //gap:中间值每轮减半 for (int gap =ary.length/2; gap>0; gap/=2) { for (int i = gap; i < ary.length; i++) { //后面要改变j的值但i值不能改变所以新建一个临时变量j代替i int j=i;        //j:数组后半部分元素的下标 int val=ary[j];        if (ary[j]<ary[j-gap]) {        //j-gap:数组前半部分元素的下标        //此处用位移法 while (j-gap>=0&&val<ary[j-gap]) { ary[j]=ary[j-gap]; j-=gap; } ary[j]=val; } }    }


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

希尔排序图解与代码

插入排序与希尔排序

插入排序(直接插入排序折半插入排序希尔排序的算法思想及代码实现)

(王道408考研数据结构)第八章排序-第二节:直接插入排序和希尔排序

搜索与排序—— 冒泡排序选择排序插入排序与希尔排序

《算法》笔记 3 - 选择排序插入排序希尔排序