插入排序算法_插入排序

插入排序算法

到目前为止,“文章”部分中充满了慢速排序算法。 冒泡排序和选择排序虽然很容易理解,但在Θ(n ^ 2)运行时是相对较慢的算法。 在这里,我将尝试解释一种对数字数组进行排序的算法,该算法对于少量数据集来说是快速的,尽管它仍然是O(n ^ 2)算法; 插入排序。

假设我们有一个n-1个元素的数组,这些数组已经按升序排序。 然后,我们将第n个元素(我们称其为x)“插入”到此排序数组中。 随之而来的是,数组的某些部分中的元素小于x,而另一部分中的元素大于x。 此外,由于我们知道现有数组已排序,因此我们知道该数组通常如下所示:

[元素<x] [元素> x]

我们通过在数组末尾创建一个空洞开始算法:

[elements <x] [elements> x] [空Kong]

现在,我们希望最后对所有n个元素完全对数组进行排序,因此警报阅读器可能会意识到在完成此步骤后,数组必须看起来像这样:

[elements <x] [x] [elements> x]

因此,所有大于x的元素都必须向下移动数组一个插槽。 实际上,只要a [j]大于x,就可以通过将任何元素a [j]移到a [j + 1]来非常简单地做到这一点。 我们从Kong之前的元素开始移动,并继续直到我们检查的元素小于x。 现在,每个元素都已移动一个插槽,并覆盖了每个先前复制的值(最后一个要移动的值除外),其中最后一个要移动的值彼此相邻。 我们知道该元素大于x(否则我们将不会移动它),因此我们将x放置在元素最初保持的位置。

此算法有力的说明是,可以将其实现为不占用额外空间。 如果我们仅将任何数组的第一个I元素视为已排序的数组,那么创建一个Kong就像增加数组的大小,制作最后一项的副本(必须将其插入其已排序的位置)并跟随我们的数组一样简单以上步骤。 伪代码算法如下所示:

void insertion_sort(int[] array) {
    for (Loop i from 1 to array.size-1)
        int x = array[i]
        int j = array[i-1]
        while (j >= 0 && array[j] > x)
            array[j+1] = array[j]
            j = j - 1
        array[j+1] = x
}

翻译自: https://bytes.com/topic/java/insights/737254-insertion-sort

插入排序算法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值