基本排序算法,包括冒泡排序,插入排序,选择排序,堆排序,快速排序等。
【冒泡排序】
复杂度是
n*n
#coding:utf8
#author:HaxtraZ
#description:冒泡排序
def bubblesort1(a):
#每次找到一个最小元素,放到数组首部
n=len(a)
for
i in range(0,n-1):
swapped=False
for
j in range(n-1,i,-1):
if
a[j]<a[j-1]:
a[j],a[j-1]=a[j-1],a[j]
swapped=True
if
not swapped:
break
def bubblesort2(a):
#这个版本的解释,在谭浩强 C++2004 版 P137
#每次找到一个最大元素并放到数组末尾
#边界处做了优化
n=len(a)
for
i in range(0,n-1):
swapped=False
for
j in range(0, n-i-1):
if
a[j]>a[j+1]:
a[j],a[j+1]=a[j+1],a[j]
swapped=True
if
not swapped:
break
def bubblesort3(a):
#这个版本来自维基百科
#外层循环本来有点问题的,如果是 range(len(a)-1,1,-1)
#那么当输入数据为 3,5,1 时,结果不正确
#当然,维基百科上这个错误我已经修改过了。
for
j in range(len(a)-1, 0, -1):
for
i in range(0, j):