直接插入排序_Java干货分享:直接插入排序

51feec19d05f6fc0f94ee3cfbbd5ea6a.png

上期分享:Java干货分享:选择排序

上一期知了姐给大家分享了在编程里经典算法之一的冒泡排序,有小伙伴问还有其他的排序方法吗?当然有呀,今天小编就给大家分享另一个排序算法——直接插入排序。

直接插入排序和它的字面意思一样,将数字插入到有序序列中排序。咱们还是借用上期小朋友按身高排序的例子来理解:一排小朋友身高不同,我们需要将小朋友们按照从矮到高的规则排成一排,这时候我们选择当前这一排中第一个小朋友,将他作为新顺序的第一个。接下来将无序序列中的第二个小朋友与之前的小朋友比较身高,如果低就作为新顺序的第一个,如果高就作为新顺序的第二个。

现在我们再来带入直接插入排序,我们的数据就和小朋友们的身高一样按照从小到大排序:首先我们进入循环,将第一个数字添加到新序列的第一位,之后遍历到的数字都与新序列的每一个数字进行大小比较,插入到合适的位置。当遍历完成之后,新的序列也就排出来了。

在直接插入排序中,需要进行两个循环嵌套,接下来还是用图文逻辑给大家演示直接插入排序的流程。

9d20bc4b83975d5921f272056aeca474.png

第一趟:(1)将第一个数11作为新有序序列的第一个数,其他数暂时不做处理,得到结果为下图。

9fa3b80066be712183c538010af8dd62.png

第二趟:(1)循环来到第二个数5,将5与有序序列的数字进行大小比较;(2)5<11,将11后移一位,5插在11前,此时得到结果为下图:

2c4a0fe6b9d8b0fd47b268e73ebc081a.png

第三趟:(1)此时大循环来到原始序列第三个数8,将8与有序序列的每个数进行比较;(2)8>5,此时5的位置不变,将8与11比较;(3)8<11,11后移一位,8插入11与5之间,此时得到结果如下:

6e4603674031b25374ca35b2076a1aec.png

第四趟:(1)循环到原始序列第4个数20,将20与新序列进行比较;(2)20>5,5的位置不变;(2)20>8,8的位置不变;(3)20>11,此时11的位置不变,20插入在有序序列最后一位。得到结果如下图:

ca3b39720419f5ec34c4f70a15f20e47.png

第5趟:(1)此时大循环来到原始序列最后一位数17,进入小循环与有序序列进行比较大小;(2)17>5,17>8,17>11,17<20,此时5、8、11都小于17位置不变,17小于20,因此20向后移一位,17插入在20前一位。此时原始序列已经循环完成,最终得到的序列就是我们需要的排好顺序的序列,最终结果如下:

87baf4d9974a362e8b9ae6c114c36de3.png

小编同样为大家准备了动图理理思路。

f73102749df155695a52a053c08bec40.png

看完直接插入排序的逻辑和原理之后,小伙伴们明白是怎么一回事了吗?下面小编给大家准备了Java实现直接插入排序的代码,自己动手试试吧!

上期分享:Java干货分享:选择排序上一期知了姐给大家分享了在编程里经典算法之一的冒泡排序,有小伙伴问还有其他的排序方法吗?当然有呀,今天小编就给大家分享另一个排序算法——直接插入排序。直接插入排序和它的字面意思一样,将数字插入到有序序列中排序。咱们还是借用上期小朋友按身高排序的例子来理解:一排小朋友身高不同,我们需要将小朋友们按照从矮到高的规则排成一排,这时候我们选择当前这一排中第一个小朋友,将他作为新顺序的第一个。接下来将无序序列中的第二个小朋友与之前的小朋友比较身高,如果低就作为新顺序的第一个,如果高就作为新顺序的第二个。现在我们再来带入直接插入排序,我们的数据就和小朋友们的身高一样按照从小到大排序:首先我们进入循环,将第一个数字添加到新序列的第一位,之后遍历到的数字都与新序列的每一个数字进行大小比较,插入到合适的位置。当遍历完成之后,新的序列也就排出来了。在直接插入排序中,需要进行两个循环嵌套,接下来还是用图文逻辑给大家演示直接插入排序的流程。第一趟:(1)将第一个数11作为新有序序列的第一个数,其他数暂时不做处理,得到结果为下图。第二趟:(1)循环来到第二个数5,将5与有序序列的数字进行大小比较;(2)5<11,将11后移一位,5插在11前,此时得到结果为下图:第三趟:(1)此时大循环来到原始序列第三个数8,将8与有序序列的每个数进行比较;(2)8>5,此时5的位置不变,将8与11比较;(3)8<11,11后移一位,8插入11与5之间,此时得到结果如下:第四趟:(1)循环到原始序列第4个数20,将20与新序列进行比较;(2)20>5,5的位置不变;(2)20>8,8的位置不变;(3)20>11,此时11的位置不变,20插入在有序序列最后一位。得到结果如下图:第5趟:(1)此时大循环来到原始序列最后一位数17,进入小循环与有序序列进行比较大小;(2)17>5,17>8,17>11,17<20,此时5、8、11都小于17位置不变,17小于20,因此20向后移一位,17插入在20前一位。此时原始序列已经循环完成,最终得到的序列就是我们需要的排好顺序的序列,最终结果如下:小编同样为大家准备了动图理理思路。看完直接插入排序的逻辑和原理之后,小伙伴们明白是怎么一回事了吗?下面小编给大家准备了Java实现直接插入排序的代码,自己动手试试吧!function insertionSort(arr) {
    var len = arr.length;
    var preIndex, current;
    for (var i = 1; i < len; i++) {
        preIndex = i - 1;
        current = arr[i];
        while (preIndex >= 0 && arr[preIndex] > current) {
            arr[preIndex + 1] = arr[preIndex];
            preIndex--;
        }
        arr[preIndex + 1] = current;
    }
    return arr;
}

 那么今天的分享就到这里了,想获取更多Java干货和行业知识,扫码关注知了小姐姐~ion insertionSort(arr) {
    var len = arr.length;
    var preIndex, current;
    for (var i = 1; i < len; i++) {
        preIndex = i - 1;
        current = arr[i];
        while (preIndex >= 0 && arr[preIndex] > current) {
            arr[preIndex + 1] = arr[preIndex];
            preIndex--;
        }
        arr[preIndex + 1] = current;
    }
    return arr;
}

function insertionSort(arr) {

var len = arr.length;

var preIndex, current;

for (var i = 1; i < len; i++) {

preIndex = i - 1;

current = arr[i];

while (preIndex >= 0 && arr[preIndex] > current) {

arr[preIndex + 1] = arr[preIndex];

preIndex--;

}

arr[preIndex + 1] = current;

}

return arr;

}

看完知了姐的分享是不是觉得直接插入排序也变得好理解了呢?那么今天的分享就到这里了,想获取更多Java干货和行业知识,扫码关注知了小姐姐~

知了编程学习圈​zhuanlan.zhihu.com
cc593143e3b4aefc2d1aac36fc383cd9.png

f56aab0f87bc5b891bed2cf23371a960.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值