一.冒泡排序
基本思路:
-
对无序表进行多趟比较交换。
-
每趟包括多次两两相邻比较,并将逆序的数据项互换位置,最终将本趟的最大项就位。
-
经过n-1趟比较排序,实现整表排序。
实现过程:
-
第1趟比较交换,共有n-1对相邻数据进行比较。(一旦经过最大项,则最大项会一路交换到达最后一项)。
-
第2趟比较交换,共有n-2对相邻数据进行比较。第二大的项会一路交换到倒数第二项。
-
…
-
直到第n-1趟完成后,最小项一定在列表首位,就不需要处理了。
def bubbleSort(alsit):
for passnum in range(len(alsit)-1, 0, -1): # 经过n-1趟比较,(n-1 到 1)
for i in range(passnum):
if alsit[i] > alsit[i+1]:
alsit[i], alsit[i+1] = alsit[i+1], alsit[i]
return alsit
时间复杂度: 比较O(n2),交换O(n2)
缺点: 效率低,每个数据项在找到最终的位置之前,必须要经过多次的比较和交换,其中大部分的操作是无效的。
优点: 不需要任何额外的存储空间开销。
二.选择排序
基本思路:
-
选择排序对冒泡排序进行了改进,保留多趟比较的思路,每趟都使当前最大项就位。
-
但每趟只交换一次。(记录最大项的位置,再和本趟的最后一项交换)
def selectSort(alist):
for fillslot in range(len(alist)-1