go使现快速排序

来源:互联网 发布:秦舞阳13岁杀人知乎 编辑:程序博客网 时间:2024/05/17 04:54

go使现快速排序

package main/*Go实现快速排序算法思路:在数组中取出一个元素作为基准值,把其它元素分为两组:“大的”是那些大于基准值的元素,“小的”是那些小于基准值的元素,递归对这两组做排序。快排快速的原因:一旦知道了某个元素比基准值小,它就不需要与那些大的元素比较。而大的元素也不需要与小的元素比较。原理解析:http://blog.csdn.net/yzllz001/article/details/50982841 */import (    "fmt")// 交换数组中两个数的位置func Swap(array []int, i int, j int) {    var tmp = array[i]    array[i] = array[j]    array[j] = tmp}// 方法1, 这种写法看起来代码有点多func QuickSort(array []int, left int, right int) {    if left >= right {        return    }    temp := array[left] //temp中存的就是基准数    i := left    j := right    for ; i !=j; {        for ; (array[j] >= temp && i<j); {            j--        }        for ; (array[i] <= temp && i<j); {            i++        }        if i < j {            Swap(array, i, j)        }    }    Swap(array, left, i) //最终将基准数归位    QuickSort(array, left, i-1) //继续处理左边的,这里是一个递归的过程    QuickSort(array, i+1, right) //继续处理右边的,这里是一个递归的过程}// 方法2, 比较简单,推荐func QuickSort2(array []int, left int, right int) {    if left > right {        return    }    last := left    for i:=left+1; i<=right; i++ {        if array[i] < array[left] {            last++            Swap(array, i, last)        }    }    Swap(array, left, last)    QuickSort(array, left, last-1) //继续处理左边的,这里是一个递归的过程    QuickSort(array, last+1, right) //继续处理右边的,这里是一个递归的过程}func main() {    ary := []int{9,3,10,4,5,7,6,8,1,2}    fmt.Printf("排序前为%v\n", ary)    QuickSort2(ary, 0, 9)    fmt.Printf("排序后为%v\n", ary)}

输出:
排序前为[9 3 10 4 5 7 6 8 1 2]
排序后为[1 2 3 4 5 6 7 8 9 10]

原创粉丝点击