演算法筆記|快速排序法( Quick Sort )

更新於 發佈於 閱讀時間約 2 分鐘

基本觀念


  快速排序法的重點是要從數列中挑選一個基準(pivot),然後重新排列數列,將比基準小的放左邊,比基準大的放右邊,如果與基準相同則放左右都可以,接著對左右的子序列做遞迴重複剛剛的2步驟,直到子序列數量剩0或1個元素。再來為大家演示實際上如何運作。


圖解快速排序法


(1)數列裡有數字1~9隨機排列。

raw-image

(2)隨機選擇一個基準(pivot)4,將比4小的放左邊,比4大的排至右邊,形成2個子序列。

raw-image

(3)重複以上步驟,從左右子序列中各選出一個基準,若排列到該子序列剩下的元素為0個或1個就停止。

raw-image

(4)順帶一提,每一個子序列的基準都是隨機選擇的唷~

raw-image

(5)差不多完成了


raw-image

(6)完成,將所有的元素整理一下


raw-image

時間複雜度計算


raw-image



快速排序法實作


import random

def quick_sort(nLst):
if len(nLst)<=1:
return nLst

left = [] #左邊串列
right = [] #右邊串列
piv = [] #基準串列
pivot = random.choice(nLst) #隨機選擇基準
for val in nLst:
if val == pivot: #加入基準串列
piv.append(val)
elif val < pivot: #若小於基準加入左邊串列
left.append(val)
else : #若大於基準加入右邊串列
right.append(val)
return quick_sort(left) + piv +quick_sort(right)


data = [8, 1, 5, 6, 4, 7, 3, 9]
print("原始串列:",data)
print("排序結果:",quick_sort(data))


下圖是快速排序法輸出的結果,有興趣的讀者也可以自己試試看唷~


raw-image










avatar-img
3會員
5內容數
人生中有的時候你會感知到,現在就是那個命運的分歧點,如果我不挽起袖子努力的話,我這一輩子大概就這樣了,所以我決定開始這個部落格,記錄我每天的努力,也希望可以分享學習的筆記與心得,大家可以一起交流學習。
留言
avatar-img
留言分享你的想法!

































































資治通艦的沙龍 的其他內容
本文介紹泡沫排序法的基本概念、圖解說明、時間複雜度計算以及程式碼實作。泡沫排序法是一種簡單易懂的排序演算法,通過不斷比較相鄰元素並交換位置,最終將最大值或最小值移動到數列的一端。文章詳細闡述了泡沫排序法的運作過程,並分析了其時間複雜度,以及如何優化演算法以提高效率。
這篇文章探討演算法的效能分析,著重於時間複雜度和空間複雜度的概念。文章首先說明如何判斷演算法的好壞,接著深入分析時間複雜度的計算方法,並以程式碼範例說明Big-O表示法。此外,文章也簡述空間複雜度的概念及其重要性,並提及常見的資料結構。
這篇文章說明演算法的定義、特徵以及一個有趣的小知識。演算法被定義為解決問題的流程,並以機車故障為例說明。文章也列出演算法的五個特徵:輸入、有限性、明確性、有效性及輸出。最後,文章提及世界上公認的第一個演算法是歐幾裡德演算法。
本文介紹泡沫排序法的基本概念、圖解說明、時間複雜度計算以及程式碼實作。泡沫排序法是一種簡單易懂的排序演算法,通過不斷比較相鄰元素並交換位置,最終將最大值或最小值移動到數列的一端。文章詳細闡述了泡沫排序法的運作過程,並分析了其時間複雜度,以及如何優化演算法以提高效率。
這篇文章探討演算法的效能分析,著重於時間複雜度和空間複雜度的概念。文章首先說明如何判斷演算法的好壞,接著深入分析時間複雜度的計算方法,並以程式碼範例說明Big-O表示法。此外,文章也簡述空間複雜度的概念及其重要性,並提及常見的資料結構。
這篇文章說明演算法的定義、特徵以及一個有趣的小知識。演算法被定義為解決問題的流程,並以機車故障為例說明。文章也列出演算法的五個特徵:輸入、有限性、明確性、有效性及輸出。最後,文章提及世界上公認的第一個演算法是歐幾裡德演算法。
你可能也想看
Google News 追蹤
Thumbnail
※ 什麼是ORDER BY? 可以讓SELECT出來的結果,根據你想要的方式排序。簡單說,用於對查詢結果進行排序。 ※ 語法: SELECT select_list FROM table_name ORDER BY column1 [ASC|DESC], column2 [ASC|DESC]
Thumbnail
在進行SQL查詢邏輯更改時,需要適當地使用SubQuery和join來達到新的排序需求。本文將介紹原本的撈取邏輯、需求以及如何使用SubQuery來解決新的排序需求。
Thumbnail
題目敘述 Sort Colors 給定一個色彩陣列,裡面的顏色包含0紅色,1白色,2藍色。 要求我們透過in-place操作,把色彩陣列依序從左到右排好, 依序出現的是紅色、白色、藍色。
Thumbnail
這篇文章介紹了排列和組閤中的錯位排列和排容原理,並提供了一種相對樸實的解題方法。透過例子詳細解釋了選擇情況下的數學原理,讓讀者能夠理解並吸收。文章通過課堂上難以推敲的題目,提出了一個相對簡單的方式來解題。 圖片選自@pngtree
Thumbnail
排序是EXCEL很常用很基礎的一個功能,他可以幫我們把資料依照指定的順序排列。 但通常我們使用都是以欄(直)的方向進行排序,其實EXCEL也可以依據列(橫)的方向進行排續哦😁 下圖是LINE社群網友提出的問題,想要把上圖的原始資料變成下圖。(相關問題可以加入LINE社群唷) 這時候用排序(尋
如何在SQL實踐中EXCEL 常用功能 篩選 和 擷取文字串?需要熟練地使用分組(GROUP BY) 與 排序 (ORDER BY) 以及SUBSTRING_INDEX函數!
Thumbnail
不同的運算子一起出現時,會根據其優先性(Precedence)來決定誰先誰後。MDN也很貼心的整理成表格了。 雖然有表格可以供我們查找,但是總不可能每一次用到運算子的時候,我們都去查找吧?我們最好對這張表有直觀上的理解與記憶。 那麼就讓我來分享我如何理解與記憶這張表吧! 運算子在做甚麼
描述順序的方式有很多種,可以用數字標示文字的方式,如下 文字 文字 文字 用數字標示文字的方式我覺得有個特質是,文字重要的程度是遞減的,也就是數字從一往後會越來越不重要。這個現象是我在寫這篇文的當下感覺到的,可能是我在過去經驗聽過有人說越重要的東西要先擺在前面;又或者是我在高中以前的
Thumbnail
解決電腦上遇到的問題、證明正確性、探討效率 並且很著重溝通,說服別人你做的事是正確且有效率的。 內容: 計算模型、資料結構介紹、演算法介紹、時間複雜度介紹。
Thumbnail
※ 什麼是ORDER BY? 可以讓SELECT出來的結果,根據你想要的方式排序。簡單說,用於對查詢結果進行排序。 ※ 語法: SELECT select_list FROM table_name ORDER BY column1 [ASC|DESC], column2 [ASC|DESC]
Thumbnail
在進行SQL查詢邏輯更改時,需要適當地使用SubQuery和join來達到新的排序需求。本文將介紹原本的撈取邏輯、需求以及如何使用SubQuery來解決新的排序需求。
Thumbnail
題目敘述 Sort Colors 給定一個色彩陣列,裡面的顏色包含0紅色,1白色,2藍色。 要求我們透過in-place操作,把色彩陣列依序從左到右排好, 依序出現的是紅色、白色、藍色。
Thumbnail
這篇文章介紹了排列和組閤中的錯位排列和排容原理,並提供了一種相對樸實的解題方法。透過例子詳細解釋了選擇情況下的數學原理,讓讀者能夠理解並吸收。文章通過課堂上難以推敲的題目,提出了一個相對簡單的方式來解題。 圖片選自@pngtree
Thumbnail
排序是EXCEL很常用很基礎的一個功能,他可以幫我們把資料依照指定的順序排列。 但通常我們使用都是以欄(直)的方向進行排序,其實EXCEL也可以依據列(橫)的方向進行排續哦😁 下圖是LINE社群網友提出的問題,想要把上圖的原始資料變成下圖。(相關問題可以加入LINE社群唷) 這時候用排序(尋
如何在SQL實踐中EXCEL 常用功能 篩選 和 擷取文字串?需要熟練地使用分組(GROUP BY) 與 排序 (ORDER BY) 以及SUBSTRING_INDEX函數!
Thumbnail
不同的運算子一起出現時,會根據其優先性(Precedence)來決定誰先誰後。MDN也很貼心的整理成表格了。 雖然有表格可以供我們查找,但是總不可能每一次用到運算子的時候,我們都去查找吧?我們最好對這張表有直觀上的理解與記憶。 那麼就讓我來分享我如何理解與記憶這張表吧! 運算子在做甚麼
描述順序的方式有很多種,可以用數字標示文字的方式,如下 文字 文字 文字 用數字標示文字的方式我覺得有個特質是,文字重要的程度是遞減的,也就是數字從一往後會越來越不重要。這個現象是我在寫這篇文的當下感覺到的,可能是我在過去經驗聽過有人說越重要的東西要先擺在前面;又或者是我在高中以前的
Thumbnail
解決電腦上遇到的問題、證明正確性、探討效率 並且很著重溝通,說服別人你做的事是正確且有效率的。 內容: 計算模型、資料結構介紹、演算法介紹、時間複雜度介紹。