import (
"fmt"
"math/rand"
)
func SortForMerge(arr []int, left int, right int) {
for i := left; i <= right; i++ {
temp := arr[i] //备份第一个
var j int
for j = i; j > left && arr[j-1] > temp; j-- { //定位
arr[j] = arr[j-1] //数据往后移动
}
arr[j] = temp //插入
}
}
func swap(arr []int, i int, j int) {
arr[i], arr[j] = arr[j], arr[i]
}
func QuickSortX(arr []int, left int, right int) {
if right-left < 2 { //数组剩下三个数,直接插入排序
SortForMerge(arr, left, right)
} else {
//随机找一个数字,放在第一个位置
swap(arr, left, rand.Int()%(right-left+1)+left)
vdata := arr[left] //坐标数据,比我小,左边;比我大,右边
lt := left // arr[left+1,lt] < vdata
gt := right + 1 //arr[gt,right] > vdata
i := left + 1 // arr[lt+1.....i]==vata
for i < gt {
if arr[i] < vdata { //移到到小于的地方
swap(arr, i, lt+1)
lt++ //前进循环
i++
} else if arr[i] > vdata {
swap(arr, i, gt-1) //移动到大于的地方
gt--
} else {
i++
}
}
swap(arr, left, lt)
QuickSortX(arr, left, lt-1)
QuickSortX(arr, gt, right)
}
}
//节约内存,直接操作数据,不需要返回,快速排序核心程序
func QuicksortPlus(arr []int) {
QuickSortX(arr, 0, len(arr)-1)
}
//用法
QuicksortPlus(arr)
专门处理大数据的快速排序算法
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 相信现在很多做IT行业的多多少少都了解或者听说过大数据这个越来越火的名词,也有很多人想往大数据这边发展。但是接触了...