排序演算法-快速排序
快速排序演算法的核心是在一個陣列中,將第一個元素放置在中間位置使這個陣列變為左邊比這個元素都小,右邊比這個組都大的一個陣列。
程式碼實現這個過程如下
// 找出arr[l...r]的分界點j
// 使其分為arr[l,j] arr[j+1,r]兩部分
func partition(arr []int, l, r) int {
// j為當前找到的分界點
// v為做為分界點的值
j, v := l, arr[l]
// i為當前正在考察的元素
for i := l+1; i <= r; i++ {
if arr[i] < v {
arr[j+1], arr[i] = arr[i], arr[j+1]
j++
}
}
a[j], a[l] = a[l], a[j]
return j
}
然後快速排序就是遞迴呼叫這個方法,將整個陣列分為兩部分,繼續再分為四部分,直到每個陣列只有一個元素就完成了排序
程式碼如下:
// QuickSort 快速排序
func QuickSort(arr []int) {
quickSort(arr, 0, len(arr)-1)
}
// 對arr的[l,r]快速排序
func quickSort(arr []int, l int, r int) {
if l >= r {
return
}
p := partition(arr, l, r)
quickSort(arr, l, p-1)
quickSort(arr, p+1, r)
}
// 找出arr的[l,r]的標識點
func partition(arr []int, l int, r int) int {
// arr[l+1:j] < v arr[j+1:i) > v
// i為正在考察的元素
v, j := arr[l], l
for i := l + 1; i <= r; i++ {
if arr[i] < v {
arr[j+1], arr[i] = arr[i], arr[j+1]
j++
}
}
arr[j], arr[l] = arr[l], arr[j]
return j
}
相關文章
- 排序演算法__快速排序排序演算法
- 排序演算法:快速排序排序演算法
- 排序演算法 - 快速排序排序演算法
- 排序演算法——快速排序排序演算法
- 排序演算法之 '快速排序'排序演算法
- #排序演算法#【4】快速排序排序演算法
- 《排序演算法》——快速排序(Java)排序演算法Java
- 【JAVA演算法】排序演算法 -- 快速排序Java演算法排序
- 排序演算法 - 快速插入排序和希爾排序排序演算法
- 演算法之常見排序演算法-氣泡排序、歸併排序、快速排序演算法排序
- 【演算法】快速排序演算法排序
- 排序演算法-Java實現快速排序演算法排序演算法Java
- Python之排序演算法:快速排序與氣泡排序Python排序演算法
- 排序演算法之快速排序的實現排序演算法
- Sorting 排序演算法: Quick Sort 快速排序排序演算法UI
- 看動畫學演算法之:排序-快速排序動畫演算法排序
- 經典排序演算法 - 快速排序Quick sort排序演算法UI
- 三種快速排序演算法以及快速排序的優化排序演算法優化
- 演算法系列(四)排序演算法中篇--歸併排序和快速排序演算法排序
- 畫江湖之演算法篇【排序演算法】快速排序演算法排序
- 畫江湖之演算法篇 [排序演算法] 快速排序演算法排序
- java:快速排序演算法與氣泡排序演算法Java排序演算法
- 演算法之旅:快速排序演算法排序
- 演算法之快速排序演算法排序
- 圖形化排序演算法比較:快速排序、插入排序、選擇排序、氣泡排序排序演算法
- 排序演算法之「快速排序(Quick Sort) _c++ 」排序演算法UIC++
- python排序演算法的實現-快速排序Python排序演算法
- 排序:氣泡排序&快速排序排序
- 排序之快速排序排序
- 【分治演算法】歸併排序,快速排序和漢諾塔演算法排序
- 演算法 | 快速排序詳解演算法排序
- 演算法導論-快速排序演算法排序
- Python 演算法 快速排序Python演算法排序
- c#-快速排序-演算法C#排序演算法
- python實現氣泡排序、插入排序以及快速排序演算法Python排序演算法
- 前端演算法:快速排序演算法前端演算法排序
- 快速排序&&歸併排序排序
- php插入排序,快速排序,歸併排序,堆排序PHP排序