专门处理大数据的快速排序算法



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)

你可能感兴趣的:(专门处理大数据的快速排序算法)