前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >插入排序

插入排序

作者头像
一个架构师
发布2022-06-20 19:38:23
1650
发布2022-06-20 19:38:23
举报
文章被收录于专栏:从码农的全世界路过

是将一个数据插入到已经排好序的有序数组中,从而得到一个新的、个数加一的有序数组;

算法适用于少量数据的排序;

时间复杂度为O(n^2);

是稳定的排序方法。

示例代码:

代码语言:javascript
复制
 public int[] insertSort(int[] ary) {
        System.out.println("排序前数组:\t" + Arrays.toString(ary));
        int[] sortAry = new int[ary.length];
        System.arraycopy(ary, 0, sortAry, 0, ary.length);
        for (int i = 1; i < sortAry.length; i++) {
            System.out.println("准备排序组数中第"+i+"个元素");
            int tmp = sortAry[i];
            if (sortAry[i] < sortAry[i - 1]) {
                int j = i - 1;
                for (; j >= 0 && sortAry[j] > tmp; j--) {
                    sortAry[j + 1] = sortAry[j];
                  System.out.println("第" + i + "个元素排序过程:\t" + Arrays.toString(sortAry));
                }
                sortAry[j + 1] = tmp;
            }
            System.out.println("数组中排序第" + i + "个元素后:\t" + Arrays.toString(sortAry));
            System.out.println();
        }
        System.out.println("最后排序结果:\t" + Arrays.toString(sortAry));
        return sortAry;
    }

假设我们要对如下数组进行排序

[42, 41, 31, 7, 17, 2, 55, 26]

排序前数组:[42, 41, 31, 7, 17, 2, 55, 26]

第0个元素是不需要进行排序的,所以是从第1个元素开始排序

准备排序组数中第1个元素:41

第1个元素排序过程:[42, 42, 31, 7, 17, 2, 55, 26]

说明:41小于42,41会对前面的数组元素进行比较移位,并确定好覆盖位置,41存储在tmp变量中

数组中第1个元素排序后:[41, 42, 31, 7, 17, 2, 55, 26]

准备排序组数中第2个元素:31

第2个元素排序过程:[41, 42, 42, 7, 17, 2, 55, 26]

说明:原索引为1的元素42,大于31,42向后移位,31存储在tmp变量中

第2个元素排序过程:[41, 41, 42, 7, 17, 2, 55, 26]

说明:索引为0的元素41,大于31,41向后移位,31存储在tmp变量中

同时索引位置为0,结束遍历,tmp变量存放在当前索引位置0

数组中第2个元素排序后:[31, 41, 42, 7, 17, 2, 55, 26]

准备排序组数中第3个元素:7

第3个元素排序过程:[31, 41, 42, 42, 17, 2, 55, 26]

第3个元素排序过程:[31, 41, 41, 42, 17, 2, 55, 26]

第3个元素排序过程:[31, 31, 41, 42, 17, 2, 55, 26]

数组中第3个元素排序后:[7, 31, 41, 42, 17, 2, 55, 26]

准备排序组数中第4个元素:17

第4个元素排序过程:[7, 31, 41, 42, 42, 2, 55, 26]

第4个元素排序过程:[7, 31, 41, 41, 42, 2, 55, 26]

第4个元素排序过程:[7, 31, 31, 41, 42, 2, 55, 26]

数组中第4个元素排序后:[7, 17, 31, 41, 42, 2, 55, 26]

准备排序组数中第5个元素:2

第5个元素排序过程:[7, 17, 31, 41, 42, 42, 55, 26]

第5个元素排序过程:[7, 17, 31, 41, 41, 42, 55, 26]

第5个元素排序过程:[7, 17, 31, 31, 41, 42, 55, 26]

第5个元素排序过程:[7, 17, 17, 31, 41, 42, 55, 26]

第5个元素排序过程:[7, 7, 17, 31, 41, 42, 55, 26]

数组中第5个元素排序后:[2, 7, 17, 31, 41, 42, 55, 26]

准备排序组数中第6个元素:55

说明:55大于左侧数组中的任何元素,不需要进行移位

数组中第6个元素排序后:[2, 7, 17, 31, 41, 42, 55, 26]

准备排序组数中第7个元素:26

第7个元素排序过程:[2, 7, 17, 31, 41, 42, 55, 55]

第7个元素排序过程:[2, 7, 17, 31, 41, 42, 42, 55]

第7个元素排序过程:[2, 7, 17, 31, 41, 41, 42, 55]

第7个元素排序过程:[2, 7, 17, 31, 31, 41, 42, 55]

数组中第7个元素排序后:[2, 7, 17, 26, 31, 41, 42, 55]

最后排序结果:[2, 7, 17, 26, 31, 41, 42, 55]

可见,在排序的过程中,是将原数组分为了有序数组和无序数组两部分,逐步将后面无序数组中的元素插入到有序数组中的合理位置中.最后所有元素完成遍历,完成排序.

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从码农的全世界路过 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档