当ChatGPT教我学会【插入排序】

这篇具有很好参考价值的文章主要介绍了当ChatGPT教我学会【插入排序】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🍎道阻且长,行则将至。🍓

🌻算法,不如说它是一种思考方式🍀


算法专栏: 👉🏻123


插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序包括直接插入排序希尔排序

  • 步骤
  1. 将第一个元素标记为已排序
  2. 对于每一个未排序的元素 X:
    2.1: “提取” 元素 X
    2.2:i = 最后排序过元素的索引0 的遍历:{
    *如果当前元素 j > X:
    ***将排序过的元素向右移一格
    *跳出循环并在此插入 X
    }
  • 图示:
    当ChatGPT教我学会【插入排序】

图示制作:VisuAlgo:数据结构和算法动态可视化

一、ChatGPT教我插入排序

为了更好的学习排序算法和了解ChatGPT,就让ChatGPT来教我学习插入排序算法吧:

1.解释插入排序希尔排序

插入排序是一种简单的排序算法,它通过构建有序序列,对于未排序的数据,在已排序序列中从后向前扫描,找到相应位置并插入。
具体操作是每次将一个待排序的元素插入到已经有序的元素集合中,并保持有序集合的有序性。对于一个长度为n的数组,我们可以先定义一个有序的集合只有第一个元素,然后一次将后面的元素插入到这个集合中,直到所有元素都被插入完成。
希尔排序是插入排序的一种改进版。它通过将一系列间隔较大的待排序元素进行插入排序,使得原来序列中的大部分元素已经基本有序,然后逐渐缩小间隔进行插入排序,最终达到整个序列有序。
具体操作是选择一个增量序列,将数据按增量序列划分成若干子序列,对每个子序列进行插入排序,然后逐步缩小增量,重复以上步骤,直到增量为1。与插入排序相比,希尔排序的关键在于选择合适的增量序列。常用的增量序列有希尔增量、Hibbard增量、Sedgewick增量等。

2.可以更详细一点吗

数据量不大时,插入排序是一种高效的排序方法,时间复杂度为O(n²),若数据已经有序,则时间复杂度将会变成O(n)。插入排序主要分为直接插入排序和折半插入排序两种。
直接插入排序的基本思想是,将待排序序列分成有序区和无序区。每次从无序区中取出元素,向有序区中插入,直到无序区为空。具体操作为从第二个元素开始,依次将其与前面的有序区进行比较并插入到正确位置上。
折半插入排序是在直接插入排序的基础上,利用二分查找确定插入位置,进一步优化了算法。具体操作是在有序区中找到中间位置后进行比较,如果被排序元素小于中间位置的值,则在左侧有序区递归查找;如果被排序元素大于中间位置的值,则在右侧有序区递归查找。
希尔排序是对插入排序的一种改进方法,通过将数据分组,对每个分组进行插入排序,使得每次插入可以同时将多个数据进行移动,提高了插入排序的效率。具体而言,希尔排序先将待排序的序列分成若干大小相同的子序列,对每个子序列进行插入排序,然后逐步缩小子序列的长度,直到子序列长度为1,即完成排序。希尔排序的时间复杂度约为O(n^(1.3)),相对于直接插入排序能更快地将数据变成有序状态。

3.再解释一下希尔排序步骤

希尔排序的具体实现步骤如下

  1. 首先选择一个步长序列,一般是折半的方式,即首先将元素分成较少的几组,距离为gap(步长);
  2. 对于每个子序列,按照插入排序的方法进行排序,即把数据插入到已排序序列中的正确位置;
  3. 缩小步长,重复上述操作,直到步长为1。

下面用一个例子来说明希尔排序的具体过程
假设有一个无序序列:{10,8,6,20,4,3,22,1,0},选择步长序列为{4,2,1},按照上述步骤进行排序。
步长为4时(将序列分成4组):
第一次分组:{10,4},{8,3},{6,22},{20,1},{4,0}
对每组进行插入排序:
{4,10},{3,8},{6,22},{1,20},{0,4}

对整个序列进行一次插入排序:
{0,3,4,6,1,8,10,20,4},序列变为:{0,3,4,4,6,8,10,20,22}

步长为2时(将序列分成2组):
第一次分组:{0,4,6,10,22},{3,4,8,20}

对每组进行插入排序:
{0,4,6,10,22},{3,4,8,20}

对整个序列进行一次插入排序:
{0,3,4,4,6,8,10,20,22}

步长为1时(将序列分成1组):
对整个序列进行插入排序:
{0,3,4,4,6,8,10,20,22}

最终得到有序序列。

4.你可以进一步优化插入排序算法吗

可以通过以下两种方法进一步优化插入排序算法:

二分查找:在插入排序时,可以利用二分查找法快速定位插入位置,避免从头开始逐个比较的方法。具体而言,插入时在有序序列中查找待插入元素的插入位置,从而减少比较次数。

希尔增量:在进行插入排序时,我们可以先将待排序元素分成若干个子序列,对每个子序列进行插入排序,然后再逐步缩小子序列的长度,直到子序列长度为1。希尔排序中的增量序列可以影响排序的效率,而希尔增量序列已知是性能较优的增量序列之一。希尔增量序列的计算方法是:H(n+1) = 2 * H(n) + 1,其中H(1) = 1,n为增量序列的索引。

通过以上两种优化方法,插入排序的时间复杂度可以进一步降低,算法效率更高。

end.

二、算法实现

直接插入排序:

public class c0_insert {
    public static void main(String[] args) {
        int[] arr={10,8,6,20,4,3,22,1,0};
        arr=insertionSort(arr);
        for (int i : arr) {
            System.out.print(" "+i);
        }
    }
    public static int[] insertionSort(int[] arr) {
        for (int i = 1; i < arr.length; i++) {
            int preIndex = i - 1;
            int current = arr[i];
            while (preIndex >= 0 && current < arr[preIndex]) {
                arr[preIndex + 1] = arr[preIndex];
                preIndex -= 1;
            }
            arr[preIndex + 1] = current;
        }
        return arr;
    }
}

当ChatGPT教我学会【插入排序】

希尔排序:

public class c1_insert {
    public static void main(String[] args) {
        int[] arr={10,8,6,20,4,3,22,1,0};
        arr=shellSort(arr);
        for (int i : arr) {
            System.out.print(" "+i);
        }
    }
    public static int[] shellSort(int[] arr) {
        int n = arr.length;
        int gap = n / 2;
        while (gap > 0) {
            for (int i = gap; i < n; i++) {
                int current = arr[i];
                int preIndex = i - gap;
                // Insertion sort
                while (preIndex >= 0 && arr[preIndex] > current) {
                    arr[preIndex + gap] = arr[preIndex];
                    preIndex -= gap;
                }
                arr[preIndex + gap] = current;
            }
            gap /= 2;
        }
        return arr;
    }
}

插入排序的时间复杂度为O(n2),空间复杂度为O(1)。

希尔排序的时间复杂度与所选的增量序列有关,平均时间复杂度为O(nlogn)到O(n2)之间,常数因子较小,性能较好。空间复杂度为O(1)。


远树带行客,孤城当落晖 — 王维

返回第一页。☝


☕物有本末,事有终始,知所先后。🍭

当ChatGPT教我学会【插入排序】

🍎☝☝☝☝☝我的CSDN☝☝☝☝☝☝🍓 文章来源地址https://www.toymoban.com/news/detail-429997.html

到了这里,关于当ChatGPT教我学会【插入排序】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 插入排序(一)——直接插入排序与希尔排序

    目录 一.前言 二.排序的概念及其运用 1.1排序的概念 1.2 常用排序算法 三.常用排序算法的实现 3.1 插入排序 3.1.1 基本思想 3.1.2 直接插入排序 3.1.3 希尔排序(缩小增量排序) 四.全部代码 sort.c sort.h test.c 五.结语 本文我们开始进入数据结构的难点——排序,当我们初步学习排序

    2024年01月20日
    浏览(23)
  • 【排序算法】排序算法介绍及插入排序 ( 直接插入排序 && 希尔排序 )

    ​ ​📝个人主页:@Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:数据结构 🎯 长路漫漫浩浩,万事皆有期待 排序 :所谓排序,就是将一串数据,按照某种规律,或者以某种特性或,将数据按照递增或者递减,将数据从 无序转变为有序

    2023年04月21日
    浏览(32)
  • 排序第一课【插入排序】直接插入排序 与 希尔排序

    目录 1. 排序的概念: 2.插入排序基本思想 3.直接插入排序 4.希尔排序 排序: 所谓排序,就是使一串记录,按照其中的某个或某些的大小,递增或递减的排列起来的操作。 稳定性: 假定在待排序的记录序列中, 存在多个具有相同的的记录,若经过排序,这些记

    2024年02月14日
    浏览(57)
  • 【数据结构】排序之插入排序(直接插入排序||希尔排序)

    在生活中处处可见排序,当我们打开京东或者其它购物平台时,搜索物品,它会有一定的排序。 这次就来分享的博客与排序有关。 正文开始。 排序 :所谓排序,就是使一串记录,按照其中的某个或某些的大小,递增或递减的排列起来的操作。 稳定性 :假定在待排序

    2024年01月16日
    浏览(34)
  • 【数据结构】常见排序算法——常见排序介绍、插入排序、直接插入排序、希尔排序

      在计算机科学中,排序是将一组数据按照指定的顺序排列的过程。排序算法由于执行效率的不同可以分为多种不同的算法。   通常情况下,排序算法可以分为两类,即 内部排序和外部排序 。内部排序是指数据全部加载到内存中进行排序,适用于数据量较小的情况,而

    2024年02月08日
    浏览(42)
  • 数据结与算法之排序-插入排序(直接插入/折半插入/希尔)

    文章目录 目录 前言 一、什么是插入排序 1.直接插入排序 2.折半插入排序          3.希尔排序 总结 理解三种排序,并将三种排序用C++实现,借鉴了王卓老师和没有难学的知识的图例 提示:以下是本篇文章正文内容,下面案例可供参考         插入排序是简单直观的排序方

    2024年02月04日
    浏览(30)
  • 数据结构进阶篇 之 【插入排序】详细讲解(直接插入排序,希尔排序)

    千万不要因为一件事不会做而失去信心,你又不是只有这一件事不会,你还有很多呢 1.1 基本思想 1.2 实现原理 1.3 代码实现 1.4 直接插入排序的特性总结 2.1 基本思想 2.2 实现原理 2.3 代码实现 2.4希尔排序的特性总结 –❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–

    2024年04月12日
    浏览(60)
  • 【数据结构常见七大排序(一)】—插入排序篇【直接插入排序】And【希尔排序】

    目录 1.排序的概念及其运用 1.1排序的概念 1.2排序运用 1.3常见的七大排序 2.直接插入排序 2.1基本思想 2.2直接插入排序 2.3动图助解 2.4直接插入排序源码 2.5直接插入排序的特性总结 3.希尔排序( 缩小增量排序 ) 3.1希尔排序概念及思想 3.2希尔排序图解 3.3希尔排序源码 3.4希尔排序

    2024年02月13日
    浏览(37)
  • 数据结构:排序- 插入排序(插入排序and希尔排序) , 选择排序(选择排序and堆排序) , 交换排序(冒泡排序and快速排序) , 归并排序

    目录 前言 复杂度总结 预备代码 插入排序 1.直接插入排序: 时间复杂度O(N^2) 空间复杂度O(1) 复杂度(空间/时间): 2.希尔排序: 时间复杂度 O(N^1.3~ N^2) 空间复杂度为O(1) 复杂度(空间/时间): 选择排序 1.直接选择排序 时间复杂度O(N^2)/空间复杂度O(1) 复杂度(空间/时间)

    2024年02月07日
    浏览(34)
  • 插入排序--折半插入排序(来一来,看一看,走过路过,不要错过)

       人生没有彩排,每天都是现场直播,不仅收视率低,而且工资不高。    插入排序根据查找插入位置的方式不同可以分为三类:按顺序法查找插入位置的—— 直接插入排序 ;按折半法也叫二分法查找插入位置的—— 折半插入排序 ;缩小增量多遍插入排序的—— 希尔排

    2024年02月09日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包