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

【排序1】插入排序算法:简单而强大的排序方法

作者头像
小舒不服输
发布2024-01-30 13:47:09
1310
发布2024-01-30 13:47:09
举报
文章被收录于专栏:编程乐园·
😊插入排序

👻1、引言

排序算法是计算机科学中一个重要的分支,它的应用广泛,例如在数据库管理、数据分析、系统安全等领域都有重要的应用。在众多的排序算法中,直接插入排序是一种简单且易于理解的排序算法。它通过将未排序的元素一个个插入到已排序的序列中,从而达到排序的目的。在本篇文章中,我们将深入探讨直接插入排序的原理、实现方式。

👻 2、基本思想

直接插入排序是一种简单的插入排序法,其基本思想是: 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。

🃏实际中我们玩扑克牌时,就用了插入排序的思想。 在发牌阶段,我们整理手中的牌时,会把拿着的牌从小到大排好,例如下图中,拿着‘A’,我们会把‘A’放在‘2’和‘K’之间,这其实就是插入排序的思想。

在这里插入图片描述
在这里插入图片描述

👻3、直接插入排序

当插入第i(i>=1)个元素时,前面的array[0],array[1],…,array[i-1]已经排好序,此时用array[i]的排序码与array[i-1],array[i-2],…的排序码顺序进行比较,找到插入位置即将array[i]插入,原来位置上的元素顺序后移 如图:

在这里插入图片描述
在这里插入图片描述

🪄代码示例:

代码语言:javascript
复制
public class InsertionSort {

    // 插入排序函数
    public static void insertionSort(int[] arr) {
        int n = arr.length;
        for (int i = 1; i < n; i++) {
            int key = arr[i];
            int j = i - 1;

            while (j >= 0 && arr[j] > key) {
                arr[j + 1] = arr[j];
                j = j - 1;
            }
            arr[j + 1] = key;
        }
    }
}

🥳直接插入排序的特性总结:

  1. 元素集合越接近有序,直接插入排序算法的时间效率越高
  2. 时间复杂度:O(N^2)
  3. 空间复杂度:O(1),它是一种稳定的排序算法
  4. 稳定性:稳定

👻4、 希尔排序( 缩小增量排序 )

希尔排序法又称缩小增量法。 希尔排序法的基本思想是:先选定一个整数,把待排序文件中所有记录分成多个组,所有距离为的记录分在同一组内,并对每一组内的记录进行排序。然后,取,重复上述分组和排序的工作。当到达=1时,所有记录在统一组内排好序。 如图:

在这里插入图片描述
在这里插入图片描述

🪄代码示例:(gap就是上图的d)

代码语言:javascript
复制
public static void shellSort(int[] array) {
        int gap = array.length;
        while (gap > 1) {
            gap = gap / 3 + 1;
            shell(array,gap);
        }
        //shell(array,1);
    }

    private static void shell(int[] array,int gap) {
        //每组的数据也在变化
        // 1+2+3+4+....+n/gap
        for (int i = gap; i < array.length; i++) {
            int tmp = array[i];
            int j = i-gap;
            for (; j >= 0 ; j-=gap) {
                //加不加等号 能取决于这个排序的稳定性
                if(array[j] > tmp) {
                    array[j+gap] = array[j];
                }else {
                    break;
                }
            }
            array[j+gap] = tmp;
        }
    }

🥳希尔排序的特性总结:

  1. 希尔排序是对直接插入排序的优化。
  2. 当gap > 1时都是预排序,目的是让数组更接近于有序。当gap = 1时,数组已经接近有序的了,这样就会很快。这样整体而言,可以达到优化的效果。我们实现后可以进行性能测试的对比。(gap 最后的取值必须是1)
  3. 希尔排序的时间复杂度不好计算,因为gap的取值方法很多,导致很难去计算,因此在好些树中给出的希尔排序的时间复杂度都不固定
  4. 稳定性:不稳定

🎉OK!今天的分享就到这里了,后面还会分享更多排序算法,敬请关注喔!!!✌️

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 😊插入排序
  • 👻1、引言
  • 👻 2、基本思想
  • 👻3、直接插入排序
  • 👻4、 希尔排序( 缩小增量排序 )
相关产品与服务
数据库智能管家 DBbrain
数据库智能管家(TencentDB for DBbrain,DBbrain)是腾讯云推出的一款为用户提供数据库性能、安全、管理等功能的数据库自治云服务。DBbrain 利用机器学习、大数据手段、专家经验引擎快速复制资深数据库管理员的成熟经验,将大量传统人工的数据库运维工作智能化,服务于云上和云下企业,有效保障数据库服务的安全、稳定及高效运行。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档