排序演算法-快速排序
快速排序演算法的核心是在一個陣列中,將第一個元素放置在中間位置使這個陣列變為左邊比這個元素都小,右邊比這個組都大的一個陣列。
程式碼實現這個過程如下
// 找出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
}
相關文章
- 排序演算法__快速排序排序演算法
- 排序演算法:快速排序排序演算法
- 排序演算法 - 快速排序排序演算法
- 排序演算法之 '快速排序'排序演算法
- 【JAVA演算法】排序演算法 -- 快速排序Java演算法排序
- 演算法之常見排序演算法-氣泡排序、歸併排序、快速排序演算法排序
- 排序演算法 - 快速插入排序和希爾排序排序演算法
- Sorting 排序演算法: Quick Sort 快速排序排序演算法UI
- 快速排序演算法排序演算法
- 【演算法】快速排序演算法排序
- 排序演算法-Java實現快速排序演算法排序演算法Java
- 排序演算法之快速排序的實現排序演算法
- 畫江湖之演算法篇【排序演算法】快速排序演算法排序
- 畫江湖之演算法篇 [排序演算法] 快速排序演算法排序
- 演算法之旅:快速排序演算法排序
- 演算法之快速排序演算法排序
- 看動畫學演算法之:排序-快速排序動畫演算法排序
- 排序演算法之「快速排序(Quick Sort) _c++ 」排序演算法UIC++
- 排序:氣泡排序&快速排序排序
- python實現氣泡排序、插入排序以及快速排序演算法Python排序演算法
- 排序之快速排序排序
- 演算法 | 快速排序詳解演算法排序
- 前端演算法:快速排序演算法前端演算法排序
- 快速排序&&歸併排序排序
- php插入排序,快速排序,歸併排序,堆排序PHP排序
- Python八大演算法的實現,插入排序、希爾排序、氣泡排序、快速排序、直接選擇排序、堆排序、歸併排序、基數排序。Python演算法排序
- Python進階-演算法-快速排序Python演算法排序
- 演算法圖解之快速排序演算法圖解排序
- 演算法之快速排序(php版)演算法排序PHP
- 快速排序演算法(Quick_Sort)排序演算法UI
- 從演算法開始[快速排序]演算法排序
- 快速排序排序
- 選擇排序和快速排序排序
- 四、歸併排序 && 快速排序排序
- 排序演算法__桶排序排序演算法
- 排序演算法__堆排序排序演算法
- 排序演算法 - 堆排序排序演算法
- 排序演算法-堆排序排序演算法
- 資料結構和演算法(Golang實現)(25)排序演算法-快速排序資料結構演算法Golang排序