插入排序

原创 2016年08月30日 22:43:53

插入排序原址排序输入的数,算法在数组A中重排这些数,

在任何时候,最多只有常数个数字存储在数组外部。

插入排序是原地排序,基本无需外部空间。

从第二个元素开始,依次遍历全部数组。

其中,前半截为已排好的有序数组而后半截为待排序的无序数组。

每个元素从后向前依次对比,直到找到自己的位置。

插入排序是稳定排序。

def insert_sort(list1):
    for j in range(1, len(list1)):  #从第2个元素开始遍历,依次将元素放在指定位置
        key = list1[j]    #记录当前值
        i = j - 1         #将当前值从当前位置之前逆序依次比较
        while i>=0 and list1[i]>key:  #如果当前值小于之前值,则说明当前值位于之前值的前面
            list1[i+1] = list1[i]   #将大于当前值的元素依次后移一位,给当前值留位置
            i -= 1
        list1[i+1] = key   #将当前值插入在第一个小于它的值的后面
    return list1


if __name__ == "__main__":
    list1 = [3,2,4,5,6,7]
    list2 = ["wang", "zhe", "tian", "jin", "da", "xue"]
    ordered_list1 = insert_sort(list1)
    ordered_list2 = insert_sort(list2)
    print ordered_list1 #[2, 3, 4, 5, 6, 7]
    print ordered_list2 #['da', 'jin', 'tian', 'wang', 'xue', 'zhe']


版权声明:本文为博主原创文章,未经博主允许不得转载。

C++实现插入排序

  • 2017年11月02日 22:26
  • 712B
  • 下载

第十六周项目1(1)验证算法1—直接插入排序

问题及代码: /* *烟台大学计算机与控制工程学院 *作 者:孙启先 *完成日期:2016年12月15日 *问题描述:用序列{57,40,38,11,34,48,75,6,19,9,7...

插入排序(C语言实现)

  • 2014年11月30日 16:12
  • 926B
  • 下载

白话经典算法系列之二 直接插入排序的三种实现

直接插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。   设数组为a[0…n-1]。 1...

插入排序的方法

  • 2013年07月10日 12:12
  • 31KB
  • 下载

直接插入排序的C实现

  • 2013年05月16日 11:20
  • 495B
  • 下载

shell(希尔)排序(改良的插入排序)

说明 插入排序法由未排序的后半部前端取出一个值,插入已排序前半部的适当位置,概念简单但速度不快。 排序要加快的基本原则之一,是让后一次的排序进行时,尽量利用前一次排序后的结果,以加 快排序的速度,Sh...

插入排序源代码

  • 2013年07月31日 08:39
  • 585B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:插入排序
举报原因:
原因补充:

(最多只允许输入30个字)