Go中的Quicksort

时间:2014-06-30 05:20:48

标签: go quicksort

我正在学习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
  }
}

我很困惑,因为这不起作用。

1 个答案:

答案 0 :(得分:6)

您遇到的错误是您永远不会将透视值附加到返回的切片。因此,对于每次递归调用,您将失去支点。

对代码进行以下更改,它将起作用:

equal := make([]string, 1, len(data))
equal[0] = pivot