相鄰元素兩兩進行比較,每次比較結束都得到陣列中最大的元素
#氣泡排序
def bubblesort(bubblelist):
#外層迴圈,整個陣列的長度
flag = true
n = len(bubblelist)
while(n):
#內層迴圈,相鄰兩個數之間進行比較
#比如四個數字兩兩比較只需要3次,所以要減一
for i in range(n-1):
#從小到大排序:前乙個>後乙個,則交換
if bubblelist[i]>bubblelist[i+1]:
bubblelist[i],bubblelist[i+1] = bubblelist[i+1],bubblelist[i]
flag = false
#用於優化時間複雜度
if flag:
break
n -= 1
return bubblelist
if __name__ == '__main__':
bubblelist = [5,7,3,6,9,8]
bubblelist = bubblesort(bubblelist)
print(bubblelist)
#時間複雜度:外層迴圈是n,內層迴圈是n,所以是o(n*n)
#空間複雜度:因為只是進行乙個比較操作,所以是o(1)
#該演算法是穩定的
從第二個元素開始插入,每次插入都需要和之前的元素進行比較。# 插入排序
def insertion_sort(insertion_list):
n = len(insertion_list)
#插入元素時從第二個元素開始比較
for i in range(1,n):
key = insertion_list[i]
#尋找當前元素前面的元素進行比較
j = i - 1
#依次將當前元素的前面元素與當前元素進行比較
while j>=0 and insertion_list[j]>key:
insertion_list[j+1] = insertion_list[j]
j -= 1
#將當前元素插入之前的序列當中
insertion_list[j+1] = key
return insertion_list
if __name__ == "__main__":
insertion_list = [4,3,1,5,2]
insertion_list = insertion_sort(insertion_list)
print(insertion_list)
#時間複雜度:o(n*n)
#空間複雜度:o(1)
#穩定
# 插入排序
#思路:i(0-len(s)),依次選擇i為最小值的下表,與後續的元素相比較
#直到找到整個陣列中的最小值,交換位置
def select_sort(select_list):
n = len(select_list)
for i in range(n):
#這裡採用的是最小值的下標
min_num = i
for j in range(i+1,n):
if select_list[j] min_num = j
#交換:將最小值與當前位置的值交換
select_list[min_num],select_list[i] = select_list[i],select_list[min_num]
return select_list
if __name__ =='__main__':
select_list = [4,2,3,5,9,8,7,6]
select_list = select_sort(select_list)
print(select_list)
# 時間複雜度:o(n*n)
#空間複雜度:o(1)
#不穩定
排序演算法 氣泡排序 插入排序
氣泡排序 步驟1 從第乙個元素開始與它的下乙個元素比較,如果比下乙個元素大,交換兩個元素的位置 如果小於或者相等,保持不變。每次交換可以保證有序的佇列長度增加1。步驟2 重複步驟1,一直到整個佇列全部有序為止。比如對於序列5,4,3,2,1,經過第一次交換後佇列改變為 4,3,2,1,5 第二次交換...
《演算法》選擇排序 插入排序 氣泡排序
選擇排序,演算法 p156 package algorithm public class selection p156 for int i 0 i n i public static void main string args test.sort a 思路 將第乙個元素與剩餘所有元素相比,如果有比第...
排序演算法 氣泡排序 選擇排序 插入排序
氣泡排序演算法 氣泡排序是最簡單的排序演算法之一。此演算法具有二次方程增長階,因此僅適合排序小列表。氣泡排序演算法是階o n 2 的演算法 package com.szy.structure.sort public class bubblesort system.out.println 排序前 fo...