[go语言 排序算法]

2019-08-06  本文已影响0人  Ucan先生

快速排序

package main

import "fmt"

func main()  {
    arr := []int{1,2,-3,1,0,-5}
    qsort(arr,0,len(arr)-1)
    fmt.Println(arr)
}

func qsort(arr []int,left int,right int) {
    fmt.Println(left,right,"\n")
    if left > right {
        return;
    }
    tmp := arr[left];
    i:=left;j:=right;
    for i < j{
        for i < j && arr[j]>= tmp{
            j--;
            continue;
        }

        for i < j && arr[i] <= tmp  {
            i++;
            continue
        }

        if i < j {
            t := arr[i];
            arr[i] = arr[j];
            arr[left] = t;
        }
    }
    arr[left] = arr[i]
    arr[i] = tmp;
    qsort(arr,left,i-1);
    qsort(arr,i+1,right);
}

堆排序

package main

import "fmt"

func main()  {
    arr := []int{1,2,-3,2,0,-5}
    heapSort(arr)
    fmt.Println(arr)
}

func heapAdjust(arr []int, currentRootNode int,size int)  {
    if currentRootNode < size {
        left := currentRootNode*2+1;
        right := currentRootNode*2+2;
        var max = currentRootNode;
        if left< size && arr[left] > arr[max] {
            max = left;
        }

        if right <size && arr[right] > arr[max] {
            max = right;
        }

        if max!=currentRootNode {
            t := arr[max]
            arr[max] = arr[currentRootNode];
            arr[currentRootNode] = t;
            heapAdjust(arr,max,size)
        }
    }
}

func buildMaxHeap(arr []int)  {
    for i:= len(arr)/2;i>=0;i--{
        heapAdjust(arr,i,len(arr))
    }
}

func heapSort(arr []int)  {
    buildMaxHeap(arr)
    a := len(arr)
    for i:=a-1;i>0;i--{
        t:=arr[0]
        arr[0] = arr[i];
        arr[i] =t;
        a--;
        heapAdjust(arr,0,a)
    }
}

上一篇 下一篇

猜你喜欢

热点阅读