def sort(alist): length = len(alist) for j in range(length-1): for i in range(length-1-j): if alist[i] > alist[i+1]: temp = alist[i] alist[i] = alist[i+1] alist[i+1] = temp return alist
alist = [3,8,5,7,6,4,1,2] print(sort(alist))
結果爲:
[1, 2, 3, 4, 5, 6, 7, 8]
- 選擇排序改進了冒泡排序,每次遍歷列表只作一次交換。爲了作到這一點,
一個選擇排序在他遍歷時尋找最大的值,並在完成遍歷後,將其放置在正確的位置。
找到最大元素,放到最後位置
def sort(alist): length = len(alist) for j in range(length-1,0,-1): #數據中最大元素的下標 max_index = 0 #該循環就能夠定位到最大元素值的索引(max_index) for i in range(1,j+1): if alist[i] > alist[max_index]: max_index = i #將最大值放置到列表最後的位置 alist[max_index],alist[j] = alist[j],alist[max_index] return alist
alist = [3,8,5,7,6,4,1,2] print(sort(alist))
# [1, 2, 3, 4, 5, 6, 7, 8]
- 插入排序的主要思想是每次取一個列表元素與列表中已經排序好的列表段進行比較,
而後插入從而獲得新的排序好的列表段,最終得到排序好的列表。好比,待排序列表爲
[49,38,65,97,76,13,27,49],則比較的步驟和獲得的新列表以下:
(帶有背景顏色的列表段是已經排序好的,紅色背景標記的是執行插入而且進行過交換的元素)
def sort(alist): for j in range(1,len(alist)): i = j while i>0: if alist[i] < alist[i-1]: alist[i],alist[i-1] = alist[i-1],alist[i] i = i-1 else: break return alist
alist = [49,38,65,97,76,13,27] print(sort(alist))
# [13, 27, 38, 49, 65, 76, 97]
def sort(alist): gap = len(alist) // 2 while gap >= 1: for j in range(gap,len(alist)): i = j while i>0: if alist[i] < alist[i-gap]: alist[i],alist[i-gap] = alist[i-gap],alist[i] i = i-gap else: break #縮減增量 gap = gap//2 return alist
alist = [49,38,65,97,76,13,27] print(sort(alist))
# [13, 27, 38, 49, 65, 76, 97]
左右假象兩個遊標 1.先讓0位置的元素爲中間值 2.從右邊開始比較,比它大的不變,小的放在前面前面遊標位置 3.小時就在從左邊開始小的不變,大的放在右邊遊標位置 4.最後中間的空位,放開始的0位置的值
def sort(alist,start,end): low = start high = end mid = alist[0] if low >= high: return while low < high: while low < high: #判斷的話要從右往左 if alist[high] > mid: high -= 1 else: alist[low] = alist[high] break while low < high: #判斷的話要從左往右 if alist[low] < mid: low += 1 else: alist[high] = alist[low] break alist[low] = mid #mid左側的子列表 sort(alist,start,low-1) #mid右側的子列表 sort(alist,low+1,end) return alist
alist = [49,38,65,97,76,13,27,55] print(sort(alist,0,len(alist)-1))
# [13, 27, 38, 49, 13, 13, 13, 55]