美文网首页力扣精解
数组-插入排序

数组-插入排序

作者: coenen | 来源:发表于2021-08-08 08:02 被阅读0次
采用插入方式对数组进行排序

插入排序百科:插入排序(insertion Sort),一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法插入排序是一种最简单的排序方法.

摘一个示例做个说明.
示例 1:
输入: [0,5,9,3,12,7]
输出: [0,3,5,7,9,12]
基本思想:

将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表.在其实现过程使用双层循环,外层循环对除了第一个元素外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动.
插入排序是指在待排序的元素中,假设前面n-1(其中n>=2)个数已经是排好顺序的,现将第n个数插到前面已经排好的序列中,然后找到合适自己的位置,使得插入第n个数的这个序列也是排好顺序的。按照此法对所有元素进行插入,直到整个序列排为有序的过程,称为插入排序 。

算法分析:
  1. 时间复杂度
    在插入排序中,当待排序数组是有序时,是最优的情况,只需当前跟前一个数比较一次,时间复杂度为O(N).
    最坏的情况是待排序的数组是逆序的,此时需要比较次数最多,总次数为1+2+3+…+N-1.时间复杂度为O(N2).
  2. 空间复杂度
    插入排序的空间复杂度为常数阶O(1).
  3. 算法稳定性
    如果待排序的序列中存在两个或者两个以上具有相同关键词的数据,排序后这些数据的相对次序保持不变,即它们的位置保持不变.
    综上,插入排序是一种稳定排序算法.
  4. 应用分析
    插入排序适用于已经有部分数据已经排好,并且排好的部分越大越好。一般在输入规模大于1000的场合下不建议使用插入排序.

代码实现-Swift版本:

func insertionSort(nums: inout [Int]){
    for i in 0 ..< nums.count {
        for j in 0 ..< i {//将i插入到i-1中
            if nums[i] < nums[j]{
                nums.swapAt(i, j)//交换,j的位置一直在变
            }
        }
    }
}

测试用例:

var nums = [3,44,38,5,47,15,36,26,27,2,46,4,19,50,48]

参考:

考察要点:

  • 数组
  • 排序

相关文章

  • 插入排序

    升序排 对数组进行插入排序 对线性表进行插入排序

  • 【数据结构】插入排序

    插入排序代码 插入排序,将数组分为两部分:有序,和无序的部分。如下面数组array={2, 5, 7, 4, 1,...

  • day11-希尔排序&快速排序&归并排序

    希尔排序(优化的插入排序) 使用思想:缩小增量排序。对数组进行预排序,再进行插入排序。 小数字在数组最后的的话,在...

  • c++day09

    插入排序基础版(后插1) 插入排序基础版(后插2) 改进 插入排序基础版(前插) 字符数组 ASCII 的 A =...

  • 插入排序和冒泡排序

    插入排序算法: 在一个有序的数组中插入一个数据,要求该数据插入后数组仍然有序。在插入排序中有序的数组就是指已经排好...

  • 一些算法题

    一、插入排序插入排序的思路是,从数组的第二个数开始,向前遍历数组arr,找到arr[i] <= item < ar...

  • 常见排序算法(1)一一插入排序

    插入排序有2种,分别是直接插入排序和希尔排序。 1.直接插入排序:从还没排序的数组里取出一个数,插入到已排序的数组...

  • 数组排序

    数组排序 sort排序 冒泡排序 快速排序 插入排序

  • 十大排序算法——希尔排序

    主要思想: 基于插入排序,交换不相邻的元素已对数组的局部进行排序,并最终用插入排序将局部有序的数组排序。思想是使数...

  • 链表的插入排序(Leetcode147)

    题目 链表的插入排序 解法 先回顾一下数组中插入排序的做法: 首先是双层for循环,外层从i=0开始一直到数组最后...

网友评论

    本文标题:数组-插入排序

    本文链接:https://www.haomeiwen.com/subject/ftmdvltx.html