美文网首页
2.1-插入排序-直接插入

2.1-插入排序-直接插入

作者: 梦即是幻 | 来源:发表于2016-08-02 08:36 被阅读21次

参考链接

基本思想

每次将一个待排序的元素,插入到前面已经排好序的子序列中,直到全部元素插入完成为止。

插入排序又分为直接插入排序、二分插入排序、链表插入等,这里只讨论直接插入排序。它是稳定的排序算法,时间复杂度为O(n^2)

待排序记录 R1,R2,… ,Rn–1, Rn
第一步:R1
第二步:(R1 ), R2
第三步:(R1 , R2), R3
……
第 j 步:(R1,R2,… ,Rj–1), Rj
……
第 n 步: (R1,R2,… ,Rn–1), Rn.

算法的实现

/**
     将 array[j] 插入到前面a[0…j-1]的有序区间所用的方法进行改写,用数据交换代替数据后移。
     如果 array[j] 前一个数据 array[j-1] > array[j],就交换 array[j] 和 array[j-1],再 j--
     直到 array[j-1] <= array[j]。这样也可以实现将一个新数据并入到有序区间。
     */
    mutating func insertSort() {
        /*
         1. 整个排序过程共进行n-1趟
         2. 每次取一个元素插入到前面排好序的数组中
         */
        if count < 2 {
            return
        }
        //每次取一个元素插入
        for insert in 1 ..< count {
            var current = insert
            while current > 0{
                let prev = current - 1
                //如果插入元素小于前一个元素 就交换2者,直到找到合适插入位置
                if self[current] < self[prev] {
                    swap(&self[current], &self[prev])
                    current -= 1
                } else {
                    break
                }
            }
            
            print(self)
        }
    }

相关文章

  • 2.1-插入排序-直接插入

    参考链接 插入排序:直接插入排序(Straight Insertion Sort) 白话经典算法系列之二 直接插入...

  • 插入排序

    一、直接插入排序 二、折半插入排序

  • 直接插入排序

    //直接插入排序

  • 【数据结构】【C#】013-插入类排序:🥇直接插入排序(稳定)

    插入排序:直接插入排序(稳定) 【 算法思想 】 直接插入排序是一种最基本的插入排序方法,其基本操作是将第 i 个...

  • 排序——插入排序

    业精于勤荒于嬉 插入排序包括:直接插入排序、折半插入排序、希尔排序(缩小增量排序) 一、直接插入排序 1. 算法思...

  • 常用算法

    插入排序 包括直接插入排序和希尔插入排序 直接插入排序 将一个记录插入到已经排序好的有序表中。 sorted数组的...

  • 排序算法原理与代码实现

    1、直接插入排序与希尔排序 直接插入排序 直接插入排序算法步骤分为两步:首先,将第一个元素当成一个有序的序列,然后...

  • 排序算法(一)直接插入排序算法

    排序算法(一)直接插入排序算法 1.基本概念  直接插入排序(Straight-Insertion-Sort)是一...

  • 算法(排序)

    一、内部排序 1、插入排序—直接插入排序(Straight Insertion Sort) 2、插入排序—希尔排序...

  • 排序总结

    一、插入排序 插入排序分为直接插入、二分插入和希尔排序; 直接插入排序 类似于扑克的排序,将待排序列分为有序序列和...

网友评论

      本文标题:2.1-插入排序-直接插入

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