美文网首页
算法系列之-插入排序(二)

算法系列之-插入排序(二)

作者: 情天孽海 | 来源:发表于2018-01-12 20:50 被阅读9次

插入排序就跟我们玩扑克牌有点像,每次摸取一张牌就插入到对应的位置,最后这手牌就是有序的;
其主要思想是:例如数组arr=[3,1,2,4] 从第一个脚标位置取数arr[1]=1,和它前面的数据进行比较
如果比前面的数小就交换位置变成[1,3,2,4],前面没有元素了,跳出二层循环,第二轮开始arr[2]=2,
2比3小,交换位置[1,2,3,4], 2比1大,二层循环结束.....依次重复

下为python实现代码

class InsertSort():
    def insertSort(self, list):
        for i in range(1, len(list)):
            for j in range(i, 0, -1):
                if list[j] < list[j - 1]:
                    list[j], list[j - 1] = list[j - 1], list[j] #这里平凡交换导致效率不高,可以有优化的空间。
                else:
                    break
        return list
#优化后这个交换变成赋值,可以提升效率
    def insertSort1(self, list):
        for i in range(1, len(list)):
            e = list[i]
            for j in range(i, -1, -1):
                if list[j - 1] > e:
                    list[j] = list[j - 1]
                else:
                    break
            list[j] = e

        return list

我们可以看到,插入排序在二层循环的时候有结束循环的条件,因此它的速度会优于选择排序,选择排序必须每次走完二层循环,但插入排序可提交终止二层循环,特别在近乎有序的排序时,插入排序优势更为明显。

相关文章

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

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

  • 算法系列之-插入排序(二)

    插入排序就跟我们玩扑克牌有点像,每次摸取一张牌就插入到对应的位置,最后这手牌就是有序的;其主要思想是:例如数组ar...

  • java 实现排序算法之「插入排序」

    java 实现排序算法系列 这是 Java 实现排序算法的第三篇文章——插入排序算法。插入排序可以说成是「一类」简...

  • Chapter 2 Foundation of Algorith

    Chapter 2 插入排序 线性查找 选择算法 归并排序算法 二分查找算法 冒泡排序 插入排序 循环不...

  • 算法-插入排序

    算 法:插入排序算法时间复杂度: 插入排序算法描述 插入排序伪代码 插入排序实现 插入排序算法概述 插入排...

  • 面试算法知识梳理(12) - 二叉树算法第二部分

    面试算法代码知识梳理系列 面试算法知识梳理(1) - 排序算法 插入排序 希尔排序 选择排序 冒泡排序 计数排序 ...

  • 面试算法知识梳理(13) - 二叉树算法第三部分

    面试算法代码知识梳理系列 面试算法知识梳理(1) - 排序算法 插入排序 希尔排序 选择排序 冒泡排序 计数排序 ...

  • 算法系列之插入排序

    作为一个程序员,一些基本的排序算法是必须要掌握的。以前人们总觉得算法是后端程序员去学的,前端只需要专注于网页的美观...

  • 数据结构&算法(一)

    一、Java实现快速排序算法 二、Java实现折半插入排序算法 三、Java实现冒泡排序算法

  • 二分插入排序

    1.算法思想 二分插入排序也是插入排序算法的一种,其基本思想是:引入二分查找的思想,在直接插入排序的基础上减少比较...

网友评论

      本文标题:算法系列之-插入排序(二)

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