一、冒泡排序
冒泡排序算法的原理如下:
1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3、针对所有的元素重复以上的步骤,除了最后一个。
4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
时间复杂度
若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数 和记录移动次数
均达到最小值:
, 。所以,冒泡排序最好的时间复杂度为
。
def bubble(alist):
n = len(alist)
for j in range(0,n-1):
count = 0
for i in range(0,n-1-j):
if alist[i] > alist[i+1]:
alist[i],alist[i+1] = alist[i+1],alist[i]
count += 1
if count == 0:
return
if __name__ == "__main__":
li = [83,21,354,34,23,76,47]
print(li)
bubble(li)
print(li)
二、选择排序
选择排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树型选择排序和堆排序。
def select_sort1(alist):
n = len(alist)
for j in range(0,n-1):
min_index = j
for i in range(j+1,n):
if alist[min_index] > alist[i]:
alist[min_index],alist[i] = alist[i],alist[min_index]
return alist