選擇排序
1.原理:是一種簡單直觀的排序演算法。原理是,將後面的元素最小元素乙個個取出來然後按順序放置。
2.步驟:
1.在未排序序列中找到最小元素,存放到排序序列的起始位置。
2.在從剩餘未排序元素中繼續尋找最小元素,然後放到已排序列的末尾。
3.重複第二步,直到所有元素都排列完畢。
3.**:
def selection_sort(li):n=len(li) #獲取li長度
for i in range (0,n): #進行比較的輪數
min=i #預設為最小值
for j in range(i+1,n): #j為列表下標,如果找到比當前值小的值,則兩者交換
if li[j]堆排序:(一般用陣列儲存)
1.思想:堆是一種資料結構,可以將堆看作一顆完全二叉樹,這顆二叉樹滿足,任何乙個非葉節點的值都不大於(或不小於)其左右孩子節點的值。將乙個無序序列調整為乙個堆,
就可以找出這個序列的最大值(或最小值),然後將找出的這個值交換到序列的最後乙個,這樣有序序列就元素增加乙個,無序序列元素就減少乙個。對新的無序序列重複
這樣的操作,就實現了排序。
2.執行過程:
1.從無序序列所確定的完全二叉樹的第乙個非葉子節點開始,從右至左,從上至下,對每個節點進行調整,最終將得到乙個大頂堆。
上述過程,直到a的孩子節點的值都小於a為止。
2.將當前無序序列的第乙個元素(反應在數中的根節點b),與無序序列的最後乙個元素交換(假設為c),b進入有序序列,到達最終位置。無序序列元素減少乙個,有序序列元素
增加乙個,此時只有節點c可能不滿足堆的定義,對其進行調整。
3.重複2的過程,直到無序序列的元素剩下乙個時排序結束。
堆排序適應於記錄數很多的情況下
**:
def sift_down(array,start,end):
while true: #當列表第乙個是以下標0開始,節點下標為i,左孩子下標則為2*i+1,右孩子下標
為2i+2,若下標以1開始,左孩子則為2*i,右孩子則為2*i+1
left_child=2*start+1 #左孩子節點下標
if left_child>end: #當節點的右孩子存在,且大於節點的左孩子
break
if left_child+1<=end and array[left_child+1]>array[left_child]:
left_child += 1
if array[left_child]>array[start]: #當左孩子的的最大值大於父節點時,則交換
array[left_child],array[start]=swap(array[left_child],array[start])
start=left_child #交換之後以交換子節點為根的堆可能不是大頂堆,需重新調整
else: #若父節點大於左右孩子,則跳出迴圈
break
def heap_sort(array): #堆排序
first=len(array)//2-1 #最後乙個有孩子的節點(//表示取整的意思)
#第乙個節點的下標為0,也可以為1,隨便定。
for i in range (first,-1,-1): #從最後乙個有孩子的節點往上調整
print(array[i])
sift_down(array,i,len[array]-1 #初始化大頂堆
print(「初始化大頂堆的結果:」,array)
for head_end in range (len[array]-1,0,-1):
array[head_end],array[0]=array[0],array[head_end] #交換堆頂與堆尾
sift_down(array,0,head_end-1)
常見排序演算法之直接選擇排序
直接選擇排序 straight select sorting 也是一種簡單的排序方法,它的基本思想是 第一次從r 0 r n 1 中選取最小值,與r 0 交換,第二次從r 1 r n 1 中選取最小值,與r 1 交換,第i次從r i 1 r n 1 中選取最小值,與r i 1 交換,第n 1次從r ...
常見排序演算法 選擇排序演算法
原理 1.選擇排序需要定義三個變數,i表示外層迴圈即for i 0 i 2.當i 0時,min初始值為i,此時min 0。內層迴圈j i 1開始到length 1處結束。當j 1時,比較a j 與a min 如果a j a min 則記錄最小值索引即min j。即if a j a min 當j 1時...
常見排序演算法01之氣泡排序與選擇排序
1 冒泡法 以8,16,1,5為例。假設從小到大,冒泡法是相鄰兩數比較的,那麼我們8和16比,8小所以不換,然後16與1比,16大要換,即變成了8,1,16,5 然後16和5比,16大要換,變成8,1,5,16。可以看出這是我們第一次相鄰兩兩比較的結果,並不能完全排好序,所以我們需要進行多次比較,多...