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)