【python排序算法】—冒泡排序

相关概念

定义

  • 冒泡排序(Bubble Sort)是把一组数据从左边开始进行两两比较交换,小的放前边,打的放后边,通过反复进行比较一直到没有数据需要交换为止。

算法流程

  • 从队首开始,两两比较数值,把大的往后交换,一直到队尾,第一个最大值固定到队尾;
  • 再从队首开始,依次亮亮比较,把次最大放到倒数第二的位置;
  • 依次循环比较,直到完成所有数据的比较和交换,完成冒泡排序。

复杂度

  • 时间复杂度:算法总共需要 n − 1 n-1 n1趟,随着趟数的增加,比对次数逐渐从 n − 1 n-1 n1减少到 1 1 1,并包括可能发生的数据项交换。比对次数是 1 — ( n − 1 ) 1—(n-1) 1—(n1)的累加: 1 2 n 2 − 1 2 n \frac{1}{2}n^{2}-\frac{1}{2}n 21n221n
  • 比对时间复杂度是 O ( n 2 ) O(n^{2}) O(n2),交换次数也是。
  • 空间复杂度无需任何额外的存储空间。

代码实现

冒泡排序

def Bubble(alist):
    for j in range(len(alist)-1):
        for i in range(len(alist)-j-1):
            if alist[i] > alist[i+1]:
                alist[i], alist[i+1] = alist[i+1], alist[i]
    return alist

Bubble([1,2,5,7,3,9])

冒泡排序:性能改进

  • 通过监测每次对比是否发生过交换,可以提前确定排序是否完成。
  • 如果某次对比没有发生任何交换,说明已经排好序,可以提前结束算法
def Bubble(alist):
	# 加入监测项exchange
    exchange = True
    passnum = len(alist)-1
    while passnum > 0 and exchange:
        exchange = False
        for i in range(passnum):
            if alist[i] > alist[i+1]:
                exchange = True
                alist[i], alist[i+1] = alist[i+1], alist[i]
        passnum -= 1
    return alist

Bubble([1,2,5,7,3,9])

选择排序

  • 每次遍历,找出最大、最小值,只交换一次位置。交换时间复杂度下降为 O ( n ) O(n) O(n)
def selectSort(lst):
    n = len(lst)
    if n==1:
        return lst
    for i in range(n-1):
        minposition = i
        for j in range(i+1,n):
            if lst[minposition] > lst[j]:
                minposition = j
        lst[i], lst[minposition] = lst[minposition], lst[i]
    return lst

selectSort([1,2,5,7,3,9,3])

猜你喜欢

转载自blog.csdn.net/qq_38734327/article/details/132376540
今日推荐