1.快速排序
def fastChoose(self,list,left,right):
# left = 0
# right = len(list) -1
key = list[left]
while (left < right):
while (left < right and list[right] >= key): //先從右側開始,與key值比較,一直到小於key值,然後把值賦予list[left];key值
right = right -1 //key值本身一直不變
list[left] = list[right]
while (left < right and list[left] <= key): //右側變了一次後,換成左邊開始與key值比較,一直到大於key值,然後把
left = left + 1 //list[left賦值給list[right].兩邊輪流與key值比較,直到一輪結束
list[right] = list[left]
list[left] = key //一輪結束,把key值賦予list[left]。這時key值到達了正確的位置
return left
def fast(self,list,left,right):
if left < right:
temp = self.fastChoose(list,left,right)
self.fast(list,left,temp-1) //然後這是key值的左邊,再次排序,跟上面的規則一樣
self.fast(list,temp+1,right) //這是key值的右側列表,再次排序
return list
算法思想:一個數組,[11,2,5,8,1,13,12]
1.設定下標left,right,然後設定一個基準值key(隨意設置,一般第一個)
2.先list[right]開始與key比較,小於key了,就把list[right]換到list[left]
3.再從左邊開始與key比價,大於key,再換到list[right]
4.key值始終不變,最後left大於等於right時,把key值給list[left]
5.一趟下來,key值到了正確的排序位置。然後比key小的都到了左邊,比key大的都到右邊
key爲11,[1, 2, 5, 8, 11, 13, 12]
6.然後key兩邊分別再次排序[1,2,5,8]和[11,13,12]
參考文獻:https://www.jianshu.com/p/2b2f1f79984e
2.冒泡排序
def BubbleSort(self):
list = [6,5,2,14,4,9,54,14,98,56]
for j in range(0,len(list)-1):
for i in range(0,len(list)-1):
if list[i] > list[i+1]:
list[i] , list[i+1] = list[i+1] , list[i]
print(list)
算法思想:
1.兩兩對比,一輪下來,把最大值放到了最右側,[X,X,X,X,X,X,X,98];
2. 第二輪下來,[X,X,X,X,X,X,X,56,98]
3. 第三輪下來,[X,X,X,X,X,X,54,56,98],以此類推,排序完成
3.選擇排序
def straightSelectSort(self,list):
for j in range(0,len(list)-1):
for i in range(j,len(list)-1):
if list[j] > list[i+1]:
list[j] , list[i+1] = list[i+1] , list[j]
print(list)
算法思想:
1.第一輪j=0,取後面所有的值,與第一個對比,然後得到最小值,放第一個list[0]
2.第二輪j=1,取所後面有的值,與第二個對比,然後得到最小值,放第二個list[1]
3.以此類推,排序完成