排序演算法介紹 氣泡排序 插入排序 選擇排序

2021-10-04 03:59:37 字數 2047 閱讀 5152

相鄰元素兩兩進行比較,每次比較結束都得到陣列中最大的元素

#氣泡排序

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...