虽然他们都是比较慢且是低级的排序算法,但对于入门学习了解还是不错的选择比较友好
选择排序:
选择排序是一种直观的排序算法,复杂度是O(n²) 属于不稳定。
用到它的时候,数据规模越小越好,唯一的好处可能就是不占用额外的内存空间了吧。
步骤
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
重复第二步,直到所有元素均排序完毕。
代码:
def xuanzhe_sort(li):
for i in range(len(li)-1): #定位第一个
min_l=i
for j in range(i+1,len(li)): #定位第二个
if li[j]<li[min_l]: #比较大小
min_l=j #改变数据
if min_l != I : #如果改变说明j小于i则交换数据
li[i],li[min_l]=li[min_l],li[i]
k=[9,8,7,6,5,4,3,2,1]
xuanzhe_sort(k)
输出:
[1,2,3,4,5,6,7,8,9]
插入排序:
插入排序的原理应该是最容易理解的,它就上大家打扑克牌整理牌面的方法。
时间复杂度O(n^2)是稳定的排序算法
算法步骤
将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)
代码:
def insert_sort(li):
for i in range(1,len(li)):
k=li[i]
j=i-1
while j>=0 and k<li[j]:
li[j+1]=li[j]
j=j-1
li[j+1]=k
l=[9,8,7,6,5,4,3,2,1]
insert_sort(l)
输出:
[1,2,3,4,5,6,7,8,9]