插入排序与希尔排序

栏目: 编程工具 · 发布时间: 6年前

内容简介:插入排序(Insertion-Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。操作步骤:示例,动图演示:

插入排序(Insertion-Sort)是一种简单直观的 排序 算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

操作步骤:

  1. 将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。
  2. 从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面)。

示例,动图演示:

插入排序与希尔排序

Python 实现

def insertion_sort(nums):
    for i in range(len(nums)):
        tmp = nums[i]
        index = i
        while index > 0 and nums[index-1] > tmp:
            nums[index] = nums[index-1]
            index -= 1
        nums[index] = tmp
        print(nums)

时间复杂度

  • 平均时间复杂度:O(n**2)。
  • 最优时间复杂度:O(n)。
  • 最坏时间复杂度:O(n**2)。
  • 空间复杂度:O(1)。
  • 稳定性:稳定。

希尔排序

基本思路

递减增量排序算法,对 插入排序 的改进,实质是分组插入排序,又叫 缩小增量排序希尔排序 提升排序的奥秘就在于 数据元素越有序,使用插入排序效率越高

操作步骤:

插入排序
插入排序

示例,动图演示:

插入排序与希尔排序

Python 实现

def shell_sort(nums):
    step = len(nums) // 2
    while step:
        for i in range(step, len(nums)):
            print(i)
            while i >= step and nums[i - step] > nums[i]:  # 子序列执行插入排序
                nums[i], nums[i - step] = nums[i - step], nums[i]
                i -= step
        step = step // 2
    return nums

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

破茧成蝶:用户体验设计师的成长之路

破茧成蝶:用户体验设计师的成长之路

刘津、李月 / 人民邮电出版社 / 2014-7 / 69.00

市面上已经有很多专业的用户体验书籍,但解决用户体验设计师在职场中遇到的众多现实问题的图书并不多见。本书从用户体验设计师的角度出发,系统地介绍了其职业生涯中的学习方法、思维方式、工作流程等,覆盖了用户体验设计基础知识、设计师的角色和职业困惑、工作流程、需求分析、设计规划和设计标准、项目跟进和成果检验、设计师职业修养以及需要具备的意识等,力图帮助设计师解决在项目中遇到的一些常见问题,找到自己的职业成长......一起来看看 《破茧成蝶:用户体验设计师的成长之路》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具