我正在学习Go,并尝试实施快速排序,但它没有返回完整列表.根据我对Go的理解,它与我编写的正常运行的Ruby实现相匹配.
我的代码是:
func quickSort(data []string) []string {
if len(data) > 1 {
pivot := data[0]
smaller := make([]string, 0, len(data))
equal := make([]string, 0, len(data))
larger := make([]string, 0, len(data))
for i := 1; i < len(data); i++ {
if data[i] > pivot {
larger = append(larger, data[i])
} else if data[i] < pivot {
smaller = append(smaller, data[i])
} else {
equal = append(equal, data[i])
}
}
return append(append(quickSort(smaller), equal...), quickSort(larger)...)
} else {
return data
}
}
Run Code Online (Sandbox Code Playgroud)
我很困惑,因为这不起作用.
您遇到的错误是您永远不会将透视值附加到返回的切片.因此,对于每个递归调用,您将失去支点.
对代码进行以下更改,它将起作用:
equal := make([]string, 1, len(data))
equal[0] = pivot
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
569 次 |
最近记录: |