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

【排序算法】插入排序

作者头像
用户11288949
发布2024-09-24 13:32:15
940
发布2024-09-24 13:32:15
举报
文章被收录于专栏:学习

1.基本介绍

插入排序(Insertion Sort)是一种简单直观的排序算法。 它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入,从而使得整个序列逐步有序。

2.数据演示

第0次排序为6  (2  5  1  7  3) 第1次排序为2  6  (5  1  7  3) 第2次排序为2  5  6  (1  7  3) 第3次排序为1  2  5  6  (7  3) 第4次排序为1  2  5  6  7  (3) 第5次排序为1  2  3  5  6  7

如图所示,将红色数组排成有序数组,那么 在后面无序数组第一个元素插入到有序数组的对应位置。反复n-1次即可完成。

3.具体步骤

1. 从第一个元素开始,该元素可以认为已经被排序。 2. 取出下一个元素,在已经排序的元素序列中从后向前扫描。 3. 如果已排序的元素大于新元素,将已排序的元素向后移一位。 4. 重复步骤 3,直到找到已排序元素小于或者等于新元素的位置。 5. 将新元素插入到该位置。 6. 重复步骤 2 - 5,直到所有元素都被排序。

思路:小编认为在外循环中确定执行的次数,以及确定无序数组第一个元素的下标,因为每次有序数组排序后,无序数组中取值要跟着变化;内部循环,要进行排序,以及插操作。

4.代码如下

代码语言:javascript
复制
public class insert {
    public static void main(String[] args) {
        int arr[]={6,2,5,1,7,3};

        for(int i=1;i< arr.length;i++){
            int insert=arr[i];

            //无序数组的第一个对比的数
            int insertIndex=i-1;
            //对比数前一个数的索引
            while (insertIndex>=0 && insert<arr[insertIndex]){
                arr[insertIndex+1]=arr[insertIndex];
                insertIndex=insertIndex-1;
            }
            arr[insertIndex+1]=insert;
            System.out.println("第"+i+"次排序为"+Arrays.toString(arr));
        }
        System.out.println("最终排序为"+Arrays.toString(arr));


    }
}

小编这里,将无序数组的值保存在一个变量里面,当执行满足小于前一个数时,将有序数组的值前移,最后不满足条件后,将变量的值插入到指定位置。

例如

2  6  5  1  7  3 先将5先前比较,发现 6 > 5,所以现将5存在变量里,6的值向前移变成 2  6  6  1  7  3 然后继续比较5>2,那么跳出循环,将5的值插入得到 2  5  6  1  7  3

 演示结果

第1次排序为[2, 6, 5, 1, 7, 3] 第2次排序为[2, 5, 6, 1, 7, 3] 第3次排序为[1, 2, 5, 6, 7, 3] 第4次排序为[1, 2, 5, 6, 7, 3] 第5次排序为[1, 2, 3, 5, 6, 7] 最终排序为[1, 2, 3, 5, 6, 7]

5.时间演示

时间在循环执行前后分别进行打印,在100000个数据中排序只要2秒。

6.总结 

插入排序的平均时间复杂度为 O(n^2) ,空间复杂度为O(1)  。它在对小规模数据进行排序时表现较好,并且代码实现相对简单。

但是缺点是

1. 时间复杂度较高:在最坏情况下,即数组完全逆序时,时间复杂度为  ,对于大规模数据的排序效率较低。

例如:2 3 4 5 1 第一次:2 3 4 5 1 第二次:2 3 4 5 1 第三次:2 3 4 5 1 第四次:1 2 3 4 5

2. 不适合大规模数据 3. 稳定性有限

最后限于小编能力有限,欢迎各位uu提出宝贵意见。

要是觉得小编的作品对你来说有帮助的话就点个小小的赞吧。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-07-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.基本介绍
  • 2.数据演示
  • 3.具体步骤
  • 4.代码如下
  • 5.时间演示
  • 6.总结 
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档