2014-06-30 13 views
5

Tôi đang học Go và cố gắng triển khai quicksort, tuy nhiên nó không trả về danh sách đầy đủ. Theo hiểu biết của tôi về Go nó phù hợp với một chức năng Ruby thực hiện tôi đã viết.Quicksort in Go

Mã của tôi là:

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 
    } 
} 

Tôi rất bối rối như những gì trong này không hoạt động.

+2

Không chắc tại sao điều này đã giảm bình chọn, đó là một câu hỏi hợp pháp. – OneOfOne

+1

so với [tex.se], nơi tôi từng rất năng động, có xu hướng ở đây để trả lời câu hỏi nhanh chóng: ( – topskip

+0

Tôi nhớ SO trước khi các mod biến nó thành chính phủ phát xít, nhắc tôi về công nghệ '/ r/' – OneOfOne

Trả lời

6

Lỗi bạn có là bạn không bao giờ thêm giá trị trục vào lát được trả về. Vì vậy, đối với mỗi cuộc gọi đệ quy, bạn sẽ mất trục xoay.

Hãy thay đổi sau để mã và nó sẽ làm việc:

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

Thở dài. Tôi biết đó là một cái gì đó cực kỳ rõ ràng. – javanut13

+0

Xe bán tải rất đẹp. Tôi vẫn đang cố gắng làm theo thuật toán-công cụ trong Go. Điều này đã giúp :) –

Các vấn đề liên quan