演算法筆記(五) 快速排序和簡單選擇排序

2022-02-24 11:44:05 字數 2039 閱讀 8602

(一)快速排序

按照快速排序的思想,對陣列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]交換

實現:

1

defselectsort(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 排序 簡單選擇排序

基本思想 在要排序的一組數中,選出最小的乙個數與第乙個位置的數交換 然後在剩下的數當中再找最小的與第二個位置的數交換,如此迴圈到倒數第二個數和最後乙個數比較為止。選擇排序的思想其實和氣泡排序有點類似,都是在一次排序後把最小的元素放到最前面。但是過程不同,氣泡排序是通過相鄰的比較和交換。而選擇排序是通...