Javascript Go中的快速排序实现

Javascript Go中的快速排序实现,javascript,algorithm,go,quicksort,Javascript,Algorithm,Go,Quicksort,我试图在go中实现一个快速排序算法,只是为了学习 到目前为止,我已经提出了以下代码: package main import ( "fmt" ) var arr = []int{20, 43, 52, -1, 43, 29, 34} func main() { fmt.Println("Unsorted: ", arr) quick_sort(arr) fmt.Println("Sorted: ", quick_sort(arr)) } func quic

我试图在go中实现一个快速排序算法,只是为了学习

到目前为止,我已经提出了以下代码:

package main

import (
    "fmt"
)

var arr = []int{20, 43, 52, -1, 43, 29, 34}

func main() {
    fmt.Println("Unsorted: ", arr)
    quick_sort(arr)
    fmt.Println("Sorted: ", quick_sort(arr))
}

func quick_sort(arr []int) []int {
    var recurse func(left int, right int)
    var swap func(i int, j int)
    var partition func(left int, right int, pivot int) int

    swap = func(i int, j int) {
        var temp = arr[i]
        arr[i] = arr[j]
        arr[j] = temp
    }

    partition = func(left int, right int, pivot int) int {
        v := arr[pivot]
        right--
        swap(pivot, right)

        for i := left; i < right; i++ {
            // arr[i] doesn't seem to be updating here
            fmt.Println(arr, left, right, i, arr[i], v)
            if arr[i] <= v {
                left++
                swap(i, left)
            }
        }

        swap(left, right)
        return left
    }

    recurse = func(left int, right int) {
        if left < right {
            pivot := (right + left) / 2
            pivot = partition(left, right, pivot)
            recurse(left, pivot)
            recurse(pivot+1, right)
        }
    }

    recurse(0, len(arr))
    return arr
}
主程序包
进口(
“fmt”
)
var arr=[]int{20,43,52,-1,43,29,34}
func main(){
fmt.Println(“未分类:”,arr)
快速分拣(arr)
fmt.Println(“排序:”,快速排序(arr))
}
func快速排序(arr[]int)[]int{
var recurse func(左整数,右整数)
变量交换函数(i int,j int)
变量分区函数(左整数、右整数、轴整数)整数
swap=func(i int,j int){
var temp=arr[i]
arr[i]=arr[j]
arr[j]=温度
}
分区=func(左整数、右整数、轴整数)整数{
v:=arr[pivot]
对--
交换(轴,右)
对于i:=左;i<右;i++{
//arr[i]在这里似乎没有更新
fmt.Println(arr,左,右,i,arr[i],v)

如果arr[i]
left++
应该在
swap()
函数之后,如下所示

   if arr[i] <= v {         
        swap(i, left)
        left++
    }

left++
应该在
swap()函数之后,如下所示

   if arr[i] <= v {         
        swap(i, left)
        left++
    }

您可以删除交换函数,因为交换是一行。例如,交换(i,左)可以替换为arr[i],arr[left]=arr[left],arr[i],您可以删除交换函数,因为交换是一行。例如,交换(i,左)可以替换为arr[i],arr[left]=arr[left],arr[i]
Unsorted:  [20 43 52 -1 43 29 34]
Sorted:  [-1 20 29 34 43 43 52]