標籤:logs 技術 bre 返回 code 交換 最大的 UI blog
一、冒泡排序
兩層for迴圈,內迴圈比較當前數與下一位的大小,如小,交換位置。
1 def bubble_sort(data):2 for i in range(len(data)-1):3 for j in range(len(data)- i -1):4 if data[j]<data[j + 1]:5 data[j], data[j + 1] = data[j + 1], data[j]
View Code
二、插入排序
迴圈有序數列後的每一位元,如果大於有序數列的最後一位,則兩數交換位置,再與有序數列的最後第二位比較,以此類推。
1 def insect_sort(data):2 for i in range(1, len(data)):3 tmp = data[i]4 j = i - 15 while j<=0 and data[j] > tmp:6 data[j],data[j + 1] = data[j + 1],data[j]7 j -= 18 data[j + 1] = tmp
View Code
三、選擇排序
每次for迴圈都找出最小的數,作為該次迴圈的結果
1 def select_sort(data):2 for i in range(len(data)-1):3 min_num = i4 for j in range(i+1, len(data)):5 if data[j]<data[i]:6 min_num = j7 data[i], data[min_num] = data[min_num], data[i]
View Code
四、快排
選第一個數,從左開始迴圈比較,如小於,停止迴圈,將小的數放至第一個數位置,從右開始迴圈,如大於,停止迴圈,將大的數放到上次迴圈空位上,如此迴圈直到left = right,返回mid,進行遞迴
1 def quick_sort(data,left,right): 2 if left<right: 3 mid = partition(data,left,right): 4 quick_sort(data,left,mid-1) 5 quick_sort(data,mid+1,right) 6 7 def partition(data,left,right): 8 tmp = data[left] 9 while left < right:10 while left < right and data[right]>=tmp:11 right -= 112 data[left] = data[right]13 while left < right and data[left]<=tmp:14 left += 115 data[right] = data [left]16 data[left] = tmp17 return left
View Code
五、堆排序
先從最小的有子節點的父節點開始迴圈調整建堆,然後取數,將堆末與堆頂換位,再進行一次除開已換下位的堆頂的調整,如此迴圈。
1 def sift(data,low,high): 2 i = low 3 j = 2*i + 1 4 tmp = data[i] 5 while j <= high: # 只要沒到最後根最後 6 if j < high and data[j] < data[j + 1]: # 是否有右孩子,且右孩子大於左孩子 7 j = j + 1 # j 成為最大孩子的下標 8 if tmp < data[j]: # 最大的孩子是否大於父親 9 data[i] = data[j] # 子孩子上位10 i = j # 重新賦值下標11 j = 2*i + 112 else: # 上述條件都不滿足,跳出迴圈13 break14 data[i] = tmp15 16 def heap_sort(data):17 n = len(data)18 for i in range(n // 2 -1 ,-1,-1):19 sift(data,i,n-1)20 for i in range(n-1,-1,-1):21 data[0],data[i] = data[i],data[0]22 sift(data,0,i-1)
View Code
python 排序演算法