如何理解插入排序?及其应用场景

插入排序

算法原理:相当于抓牌,每次新抓的牌要保证有序,将新抓的牌与前面进行依次比较,如果比前面的小,进行交换。一直保证每次抓的牌,插入后的牌是基本有序。

例子:【3,2,5,4,2,3,3】排序,从小到大排序。

1. 要确保【0,0】范围要有序,因为只有一个数字3,所以肯定是有序的,无需交换

排序前:【】

新抓的牌【3】 待排序:【2,5,4,2,3,3】

排序后:【3】

2. 要确保【0,1】范围要有序,此时相当于2是新抓的牌,和前面的牌比较(数字比较大小),交换数字2,3

排序前:【3】

新抓的牌【2】 待排序:【5,4,2,3,3】

排序后:【2,3

3.要确保【0,2】范围要有序,此时新抓的牌是5,和前面的排序的数字牌进行依次比较,即是将5和2,3,5是比3大,不需要移动。5比3大,无需要进行移动。

排序前:【2,3】

新抓的牌【5】 待排序:【4,2,3,3】

排序后:【2,3,5

4.要确保【0,3】范围要有序,此时新抓的牌是4,和前面的排序的数字牌进行依次比较,即是将4和2,3,5比较。4比5小,交换。后面的无需移动

排序前:【2,3,5】

新抓的牌【4】 待排序:【2,3,3】

插入后:【2,3,5,4】 4比5小 交换

排序后:【2,3,4,5】 4比后面的都要大,无需要移动

5.要确保【0,4】范围要有序,此时新抓的牌是2,和前面的排序的数字牌进行依次比较,即是将2和2,3,4,5比较。

排序前:【2,3,4,5】

新抓的牌【2】 待排序:【3,3】

插入后:【2,3,4,5,2】 2比5小,交换

排序后:【2,3,4,2,5】 2比4小,交换

排序后:【2,3,2,4,5】 2比3小,交换

排序后:【2,2,3,4,5】无需要交换

6.要确保【0,5】范围要有序,此时新抓的牌是3,和前面的排序的数字牌进行依次比较,即是将3和2,2,3,4,5比较。

排序前:【2,2,3,4,5】

新抓的牌【3】 待排序:【3】

插入后:【2,2,3,4,5,3】 3比5小,交换

排序后:【2,2,3,4,3,5】 3比4小,交换

排序后:【2,2,3,3,4,5】 3比3一样大,无需要交换

7.要确保【0,6】范围要有序,此时新抓的牌是3,和前面的排序的数字牌进行依次比较,即是将3和2,2,3,3,4,5比较。重复6操作

public static void insertionSort(int [] arr)
{
    if(arr==null||arr.length <2){
        return;
    }
    for(int i = 1;i< arr.length;i++) //做到0-i上有序
    {
        for(int j =i-1;j>=0&&arr[j)>arr[j+1];j--){
        swap(arr,j,j+1);
        }
    }

}
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值