插入排序

应用场景

对于少量元素的排序,他是一个有效的算法

工作方式(比喻):

桌子上有很多牌,左手从中任意抽取一张,插入右手已排好序的牌组中

实现过程

桌上有牌 [5,2,4,6,1,3] 右手无牌
左手抽第一张 5 放于右手, 此时右手 [ 5 ] ,桌上[2 , 4 , 6 , 1 , 3 ]
下一趟 抽 2 ,2比5小 放于 5 前 此时右手[2,5 ]

下一趟 4 比2大 比5小 放于2,5的中间 此时右手[2 , 4 ,5 ]
在这里插入图片描述
下一趟 6 大于2,4,5 不动 此时右手[2 , 4 , 5 , 6 ]
下一趟1 小于 2 ,放在 2 前面 ,此时右手[1 , 2 , 4 , 5 , 6 ]
在这里插入图片描述
最后一趟 3 大于2 小于4 放在 2,4中间
在这里插入图片描述
此时右手牌[1,2,3,4,5,6] 排序完成在这里插入图片描述

Java代码实现

import java.util.Arrays;

public class arrtest {
    public static void main(String[] args) {
        int[] arr = new int[]{5,2,4,6,1,3};
        for(int j = 1;j<arr.length;j++){  //循环的趟数
            int key = arr[j];
            int i = j-1; //从待插入元素的前一个开始比较
            while(i >= 0 && arr[i] > key){  //比较是否比所定位元素大,若小就一直往前,直到比其大为止
                arr[i+1] = arr[i];  //把该元素往后移一位
                i--; //再往前比较
            }
            arr[i+1] = key; //将该元素插入
            System.out.println("第"+j+"趟"+Arrays.toString(arr));  //输出该趟结果
        }
        System.out.println("最后结果"+Arrays.toString(arr));  //输出最终结果
    }
}

输出

1[2, 5, 4, 6, 1, 3]2[2, 4, 5, 6, 1, 3]3[2, 4, 5, 6, 1, 3]4[1, 2, 4, 5, 6, 3]5[1, 2, 3, 4, 5, 6]
最后结果[1, 2, 3, 4, 5, 6]

时间复杂度

O(n2
详情请见:https://blog.youkuaiyun.com/zjs_scallop/article/details/105073725

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值