比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。 對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。 針對所有的元素重複以上的步驟,除了最後一個。 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較
a = [45,85,3,45,96,27,85,91]
for i in range(len(a)-1):
for j in range(0,len(a)-1-i):
if a[j] > a[j+1]:
a[j], a[j+1] = a[j+1], a[j]
print(a)
最優時間複雜度爲:o(n)
最壞時間複雜度爲:o(n²)
選擇
1.設第一個元素爲比較元素,依次和後面的元素比較,比較完所有元素找到最小的元素,將它和第一個元素互換
2.重複上述操作,我們找出第二小的元素和第二個位置的元素互換,以此類推找出剩餘最小元素將它換到前面,即完成排序
a = [45,85,3,45,96,27,85,91]
for i in range(0, len(a)-1):
for j in range(i+1, len(a)):
if a[i] > a[j]:
a[i], a[j] = a[j], a[i]
print(a)
最優時間複雜度爲:o(n²)
最壞時間複雜度爲:o(n²)
插入
後面的一次向前比較
a = [45,85,3,45,96,27,85,91]
for i in range(1, len(a)):
for j in range(i, 0, -1):
if a[j] < a[j-1]:
a[j], a[j-1] = a[j-1], a[j]
print(a)
最優時間複雜度爲:o(n)
最壞時間複雜度爲:o(n²)
快速排序
對於一串序列,首先從中選取一個數,凡是小於這個數的值就被放在左邊一摞,凡是大於這個數的值就被放在右邊一摞。然後,繼續對左右兩摞進行快速排序。
def fast_sort(a, start, end):
if start >= end:
return
mid = a[start]
low = start
high = end
while low < high:
while low < high and a[high] >= mid:
high -= 1
a[low] = a[high]
while low < high and a[low] < mid:
low += 1
a[high] = a[low]
a[low] = mid
fast_sort(a, start, low - 1)
fast_sort(a, low + 1, end)
a = [22, 34, 45, 66, 16, 10, 18, 28]
fast_sort(a, 0, len(a) - 1)
print(a)
最優時間複雜度爲:o(logn)
最壞時間複雜度爲:o(n²)