插入排序
基本思路
- 把待排序的原数列中的第一个数作为已排序列表的元素,剩余元素组成待排序列表;
- 接着从待排序列表中的第一个数开始,与已排序列表中的数一一作比较,并且是从右向左作比较;
- 若待排序数比已排序列表中的最右侧第一个数小,则进行已排序列表中该数字右移操作,并将待排序数插入该数字位置上;
- 循环进行待排序数与已排序列表中最右侧第二个数字比较;若待排序数仍比列表中数小,则继续进行右移、插入等操作,再进行与右第三个数比较;若待排序数比列表中数大,则退出循环;
- 待排序列表中之后的数依次与已排序列表中数进行比较。
图画展示
代码呈现
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)

1万+

被折叠的 条评论
为什么被折叠?



