Javascript Go中的快速排序实现
我试图在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
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]