冒泡排序:
def bubble_sort(li): # 函數方式for i in range(len(li)-1):exchange=Falsefor j in range(len(li)-i-1):if li[j]>li[j+1]:li[j],li[j+1]=li[j+1],li[j]exchange=Trueif not exchange:return
選擇排序:
從左往右找到最小的元素,放在起始位置;重復上述步驟,依次找到第2小、第3小元素...
第0次循環從[0,n-1]中找最小元素a[x],與a[0]交換
第1次循環從[1,n-1]中找最小元素,與a[1]交換
第2次循環從[2,n-1]中找最小元素,與a[2]交換
第i次循環從[i,n-1]中找最小元素,與a[i]交換
第n-2次循環從[n-2,n-1]中找最小元素,與a[n-2]交換時間復雜度:O(n'2),空間復雜度O(1),穩定
n = int(input())
a = list(map(int, input().split()))
for i in range(n - 1): # 一共n-1次!min = i # 每次默認第一個值為最小值for j in range(i + 1, n):if a[j] < a[min]:min = ja[i], a[min] = a[min], a[i]print(' '.join(map(str, a)))
插入排序:
第一個元素看做已排序,從左往右遍歷每一個元素:
在已排序元素中從后往前掃描 : 如果當前元素大于新元素,則該元素移動到后一位
重復第二步直至找到小于等于新元素則停止。
將上述步驟看做摸牌,每次摸一張牌從后往前判斷是否可以插入
對于第i張牌a[i],[0, i-1]中的牌都是已經排好順序的
從后往前逐個判斷ai]是否大于a[i]
如果a[i]>a[i]:則a[i]往后挪一個位置;如果a[i]<=a[i]:此時在aj+1]的位置放置a[i]
時間復雜度:O(n^2),空間復雜度O(1),不穩定
for i in range(1,len(li)): # 功n-1趟,i表示摸到牌的下標tmp=li[i] # 每次摸的牌j=i-1 # 手里最右側的while j>=0 and li[j]>tmp: # 一直往左走li[j+1]=li[j] # 右移j-=1li[j+1]=tmp # 選好位置了
?
?