1、算法介绍
快速排序是一种分而治之的思想。
(1)从待排序序列找一个元素(一般取第一个元素)作为基准元素
(2)遍历序列,小于基准元素排在基准元素左边,大于基准元素的排在基准元素右边,相等可随意(不稳定)
(3)递归基准元素左右两边的序列进行步骤(1)(2),递归结束则排序完成
2、代码实现
2.1、golang
package main
import (
"fmt"
)
func main() {
slice := []int{5, 3, 12, 54, 23, 12, 6, 9, 19}
SortQuick(slice)
fmt.Println(slice)
}
//快速排序
func SortQuick(slice []int) {
if len(slice) <= 1 {
return
}
//分而治之,左右开弓
//第一个元素作为基准元素,左边从第二元素开始,右边从最后一个元素开始
key, left, right := 0, 1, len(slice)-1
for left <= right {
if slice[left] > slice[key] {
slice[left], slice[right] = slice[right], slice[left]
right--
} else {
slice[left], slice[key] = slice[key], slice[left]
key++
left++
}
}
SortQuick(slice[:key])
SortQuick(slice[key+1:])
}
2.2、python3
# 快速排序
def sort_quick(arr, left, right):
if left >= right:
return
# 基准元素下标,左下标,右下标
key, tempL, tempR = left, left + 1, right
while tempL <= tempR:
if arr[tempL] > arr[key]: # 大的放右边
arr[tempL], arr[tempR] = arr[tempR], arr[tempL]
tempR -= 1
else: # 小的放左边
arr[tempL], arr[key] = arr[key], arr[tempL]
key += 1
tempL += 1
sort_quick(arr, left, key - 1)
sort_quick(arr, key + 1, right)
if __name__ == '__main__':
arr = [5, 3, 12, 54, 23, 12, 6, 9, 19]
sort_quick(arr, 0, len(arr) - 1)
print(arr)