算法代码实现之三向切分快速排序,Golang(Go语言)实现
来源:互联网 发布:淘宝子账号干嘛的 编辑:程序博客网 时间:2024/06/06 20:56
封装成函数:
//三向切分快速排序
func ThreeWayQuickSort(s []int) {
sort3way(s, 0, len(s)-1)
}
//在lt之前的(lo~lt-1)都小于中间值
//在gt之前的(gt+1~hi)都大于中间值
//在lt~i-1的都等于中间值
//在i~gt的都还不确定(最终i会大于gt,即不确定的将不复存在)
func sort3way(s []int, lo, hi int) {
if lo >= hi {
return
}
v, lt, i, gt := s[lo], lo, lo+1, hi
for i <= gt {
if s[i] < v {
swap(s, i, lt)
lt++
i++
} else if s[i] > v {
swap(s, i, gt)
gt--
} else {
i++
}
}
sort3way(s, lo, lt-1)
sort3way(s, gt+1, hi)
}
func swap(s []int, i int, j int) {
s[i], s[j] = s[j], s[i]
}
测试:
s := []int{9, 0, 6, 5, 8, 2, 1, 7, 4, 3}
fmt.Println(s)
ThreeWayQuickSort(s)
fmt.Println(s)
输出:
[9 0 6 5 8 2 1 7 4 3]
[0 1 2 3 4 5 6 7 8 9]
1 0
- 算法代码实现之三向切分快速排序,Golang(Go语言)实现
- 算法代码实现之快速排序,Golang(Go语言)实现
- 算法代码实现之三向切分快速排序,Java实现
- 算法代码实现之三向切分快速排序,C/C++实现
- 算法代码实现之冒泡排序,Golang(Go语言)实现
- 算法代码实现之选择排序,Golang(Go语言)实现
- 算法代码实现之插入排序,Golang(Go语言)实现
- 算法代码实现之希尔排序,Golang(Go语言)实现
- 算法代码实现之堆排序,Golang(Go语言)实现
- [算法之排序]三向切分的快速排序算法(java实现)
- 快速排序-三向切分(java实现)
- 算法代码实现之二分法查找,Golang(Go语言)实现
- 快速排序算法原理及实现(单轴快速排序、三向切分快速排序、双轴快速排序)
- 算法代码实现之归并排序,Golang(Go语言)实现,自顶向下与自底向上两种方式
- 快速排序之三向切分
- 求两圆交点算法代码实现(Golang/Go语言)
- 三向切分快速排序
- 三向切分快速排序
- hdu 1559 最大子矩阵(二维树状数组)
- 安卓通知的使用系列3:对话框通知的使用之警告对话框
- 原生ajax post 和get 方式传值
- jQuery.Callbacks
- mac下操作mininet
- 算法代码实现之三向切分快速排序,Golang(Go语言)实现
- @RequestBody
- express 获取请求参数的方式
- Unity中UGUI的部分控件的使用
- ifup/ifdown
- 【函数式】Monads模式初探——Functor
- Android studio 中的中文乱码的问题的解决
- 寻找开源代码的方式
- Android Json浅析