background image

基本排序算法,包括冒泡排序,插入排序,选择排序,堆排序,快速排序等。
 
【冒泡排序】
 
复杂度是

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):