排序算法之 插入排序

来源:互联网 发布:星星知我心演员 编辑:程序博客网 时间:2024/06/05 09:51

插入排序

基本思路

  • 把待排序的原数列中的第一个数作为已排序列表的元素,剩余元素组成待排序列表;
  • 接着从待排序列表中的第一个数开始,与已排序列表中的数一一作比较,并且是从右向左作比较;
  • 若待排序数比已排序列表中的最右侧第一个数小,则进行已排序列表中该数字右移操作,并将待排序数插入该数字位置上;
  • 循环进行待排序数与已排序列表中最右侧第二个数字比较;若待排序数仍比列表中数小,则继续进行右移、插入等操作,再进行与右第三个数比较;若待排序数比列表中数大,则退出循环;
  • 待排序列表中之后的数依次与已排序列表中数进行比较。

图画展示

insertSort

代码呈现

SortAlgorithm.py

# !/usr/bin/env python# -*- coding:utf-8 -*-__author__ = 'jwj'# 插入排序,默认升序,desc=True时为降序def insertSort(list, desc=False):    count = len(list)    if count == 0 or count == 1:        return list    for j in range(1, count):        key = list[j]        i = j - 1        if desc:            while i >= 0 and list[i] < key:                list[i+1] = list[i]                list[i] = key                i -= 1        else:            while i >= 0 and list[i] > key:                list[i+1] = list[i]                list[i] = key                i -= 1    return list

main.py

# !/usr/bin/env python# -*- coding:utf-8 -*-from SortAlgorithm import *if __name__ == '__main__':    list = [45,2,5,11,1]    print insertSort(list)    #output: [1, 2, 5, 11, 45]    print insertSort(list,True)    #output: [45, 11, 5, 2, 1]

算法分析

  • 插入排序基本操作:将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数列,算法适用于少量数据的排序,是稳定的排序方法。
  • 时间复杂度
    最好情况:原列表内数据已序,for循环进去,while循每次只需进行测试条件判断一次,T(n)=O(n)
    最坏情况:原列表内数据均逆序,for循环进去,while循环需每次都进行条件判断和内部语句执行,T(n)=O(n^2)
0 0