(一)快速排序
按照快速排序的思想,對陣列a[p…r]進行排序。
1、 選擇乙個基準a[q],調整陣列,確保滿足下面2個條件。
a) a[p…q-1] 的資料都小於等於 a[q]
b) a[q+1…r] 的資料都大於a[q]
2、 對a[p…q-1] 和 a[q+1…r]重複1步驟
例如:對列表[12,7,9,8,10,16,17,15]進行排序
1、 選擇基準a[q] = 12,小於等於12的都插入到12前面,最後[7,9,8,10,12,16,17,15] ,返回基準a[q]的索引=4
2、 分別對a[p…q-1](即[7,9,8,10])和a[q+1…r](即[16,17,15])重複1過程。
實現:
1#快速排序
2def
quicksort(a,p,r):3#
當p等於r的時候,代表只有乙個元素,這個時候就沒必要呼叫partition(a,p,r)了
4if p !=r:
5 q =partition(a,p,r)6#
遞迴7quicksort(a,p,q)
8 quicksort(a,q+1,r)
9returna10
#調整列表
11def
partition(a,p,r):
12 x = a[p] #
選擇a[p]作為基準13#
迭代列表其他元素(a[p]之外的元素)
14for i in range(p+1,r):15#
小於基準的資料,都插入到a[p]前面
16if a[i] <=x:17#
20200510更新18#
a.insert(p,a.pop(i))
19 a[p],a[i] =a[i],a[p]
20 a[p+1],a[i] = a[i],a[p+1]
21 p += 1 #
獲取基準元素最新的索引22#
返回基準元素的索引
(二) 簡單選擇排序
簡單選擇排序的思路是,假設列表有n個元素,對前n-1個元素執行下面的過程
1、從第乙個元素開始查詢,找出列表中的最小元素和a[0]交換
2、從第二個元素開始查詢,找出列表中的最小元素和a[1]交換
3、從第三個元素開始查詢,找出列表中的最小元素和a[2]交換
實現:
1defselectsort(a):2#
迭代列表的前n-1個元素
3for i in range(len(a)-1):
4 k =i
5for j in range(i+1,len(a)):
6if a[k] >a[j]:
7 k = j #
更新最小值的索引8#
如果a[i]不是最小值,交換a[i],a[k]的值
排序演算法(五) 簡單選擇排序
當讀者聽到這個名字 簡單選擇排序,是不是就覺得很簡單呢?其實,簡單選擇排序思想也比較簡單,比上一節的快速排序可能更好理解。基本思想 選擇排序的主要操作是選擇,其主要思想是 每趟排序在當前待排序序列中選出關鍵碼最小的記錄,新增到有序序列中。第i 趟在n i 1 i 1,2,n 1 個記錄中選取關鍵碼最...
排序演算法(五) 簡單選擇排序
一 什麼是選擇類排序?顧名思義,選擇類排序的核心就是 選擇 為什麼選擇呢?怎麼樣選擇呢?選擇類排序的基本思路就是 在待排序序列中選擇乙個最小 最大 的元素出來,並將之放到合適的位置上,最終將待排序序列變成乙個有序的序列。二 有哪些選擇類的排序演算法?根據選擇元素的方式不同,我們討論兩種選擇類排序演算...
演算法3 排序 簡單選擇排序
基本思想 在要排序的一組數中,選出最小的乙個數與第乙個位置的數交換 然後在剩下的數當中再找最小的與第二個位置的數交換,如此迴圈到倒數第二個數和最後乙個數比較為止。選擇排序的思想其實和氣泡排序有點類似,都是在一次排序後把最小的元素放到最前面。但是過程不同,氣泡排序是通過相鄰的比較和交換。而選擇排序是通...