常见排序算法

Posted dr-wei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常见排序算法相关的知识,希望对你有一定的参考价值。

常见排序算法

本文介绍了Go语言版经典的排序算法–快速排序、归并排序和堆排序。

排序算法

快速排序

func quickSort(data []int) {
    if len(data) <= 1 {
        return
    }
    base := data[0]
    l, r := 0, len(data)-1
    for i := 1; i <= r; {
        if data[i] > base {
            data[i], data[r] = data[r], data[i]
            r--
        } else {
            data[i], data[l] = data[l], data[i]
            l++
            i++
        }
    }
    quickSort(data[:l])
    quickSort(data[l+1:])
}

func main() {
    s := make([]int, 0, 16)
    for i := 0; i < 16; i++ {
        s = append(s, rand.Intn(100))
    }
    fmt.Println(s)
    quickSort(s)
    fmt.Println(s)
}

归并排序

func mergeSort(data []int) []int {
    length := len(data)
    if length <= 1 {
        return data
    }
    num := length / 2
    left := mergeSort(data[:num])
    right := mergeSort(data[num:])
    return merge(left, right)
}

func merge(left, right []int) (result []int) {
    l, r := 0, 0
    for l < len(left) && r < len(right) {
        if left[l] < right[r] {
            result = append(result, left[l])
            l++
        } else {
            result = append(result, right[r])
            r++
        }
    }
    result = append(result, left[l:]...)
    result = append(result, right[r:]...)
    return
}

func main() {
    s := make([]int, 0, 16)
    for i := 0; i < 16; i++ {
        s = append(s, rand.Intn(100))
    }
    fmt.Println(s)
    s = mergeSort(s)
    fmt.Println(s)
}

堆排序

func heapSort(array []int) {
    m := len(array)
    s := m / 2
    for i := s; i > -1; i-- {
        heap(array, i, m-1)
    }
    for i := m - 1; i > 0; i-- {
        array[i], array[0] = array[0], array[i]
        heap(array, 0, i-1)
    }
}
func heap(array []int, i, end int) {
    l := 2*i + 1
    if l > end {
        return
    }
    n := l
    r := 2*i + 2
    if r <= end && array[r] > array[l] {
        n = r
    }
    if array[i] > array[n] {
        return
    }
    array[n], array[i] = array[i], array[n]
    heap(array, n, end)
}
func main() {
    s := make([]int, 0, 16)
    for i := 0; i < 16; i++ {
        s = append(s, rand.Intn(100))
    }
    fmt.Println(s)
    heapSort(s)
    fmt.Println(s)
}

以上是关于常见排序算法的主要内容,如果未能解决你的问题,请参考以下文章

基于比较的七种常见排序算法

基于比较的七种常见排序算法

算法 | Java 常见排序算法(纯代码)

常见排序算法

常见排序算法思路和简单代码实现

常见排序算法代码总结(Java版)