原文地址:http://wuchong.me/blog/2014/02/09/algorithm-sort-summary/
本篇博客实现的方法都是从小到大排序
一冒泡排序
冒泡排序的原则:重复走访要排序的序列,进行大小比较,如果顺序错误,则把他们交换位置
操作步骤:
1、比较相邻的元素,如果第一个比第二个大,则交换他们两个
2、对第0个到第n-1个数据做同样的工作,最大的数就到了数组的最后位置上
3、针对所有的元素都重复以上的步骤,除了最后一个
4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字进行比较
#coding=utf-8
"""冒泡方法"""
list_sort=[2,5,1,3,1,4]
def bubble_sort(array):
n=len(array)
for i in range(n):
for j in range(1,n-i):
if array[j-1]>array[j]:
array[j-1],array[j]=array[j],array[j-1]
return array
print(bubble_sort(list_sort))
方法2:选择排序
步骤:
1、在末排序序列中找到最小的元素,排放在序列的起始位置
2、再从剩余未排序的元素中继续寻找最小的元素,放在已经排序的序列的末尾
3、以此类推,直到排序完毕
"""选择排序"""
def select_sort(ary):
n=len(ary)
for i in range(0,n):
min=i #最小的元素的下标标记
for j in range(i+1,n):
if ary[j]<ary[min]:
min=j #从剩余位置开始寻找,如果还有比较小的数,则把角标位置交换
ary[min],ary[i]=ary[i],ary[min]
return ary
print(select_sort([100,3,5,2,1,4]))
方法3:插入排序
工作原理:对于每个未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
操作步骤:
1、从第一个元素开始,该元素可以认为已经被排序
2、取出下一个元素,在已经排序的元素序列中从后面向前面扫描
3、如果扫描的元素(已排序)大于新元素,则该元素后移动一位
4、重复步骤3,直到找到已经排序的元素小于或者等于新元素的位置
5、将新元素插入到该位置后
6、重复步骤2-5
def insert_sort(ary):
n=len(ary)
for i in range(1,n):
if ary[i]<ary[i-1]:
temp=ary[i]
index=i #待插入的下标
for j in range(i-1,-1,-1):
if ary[j]>temp:
ary[j+1]=ary[j]
index=j
else:
break
ary[index]=temp
return ary
print(insert_sort([2,1,100,4,22,0]))