分享
golang实现快排
datakv · · 6203 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
// QuickSort
package main
import (
"fmt"
"math/rand"
"time"
)
func swap(a int, b int) (int, int) {
return b, a
}
func partition(aris []int, begin int, end int) int {
pvalue := aris[begin]
i := begin
j := begin + 1
for j < end {
if aris[j] < pvalue {
i++
aris[i], aris[j] = swap(aris[i], aris[j])
}
j++
}
aris[i], aris[begin] = swap(aris[i], aris[begin])
return i
}
func quick_sort(aris []int, begin int, end int) {
if begin+1 < end {
mid := partition(aris, begin, end)
quick_sort(aris, begin, mid)
quick_sort(aris, mid+1, end)
}
}
func rand_array(aris []int, lent int) {
for i := 0; i < lent; i++ {
r := rand.New(rand.NewSource(time.Now().UnixNano()))
aris[i] = r.Intn(1000)
}
}
func main() {
intas := []int{0, 0, 0, 0, 7, 20, 4, 77, 1, 22}
rand_array(intas, 10)
fmt.Println(intas)
quick_sort(intas, 0, 10)
fmt.Println(intas)
}
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信6203 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
// QuickSort
package main
import (
"fmt"
"math/rand"
"time"
)
func swap(a int, b int) (int, int) {
return b, a
}
func partition(aris []int, begin int, end int) int {
pvalue := aris[begin]
i := begin
j := begin + 1
for j < end {
if aris[j] < pvalue {
i++
aris[i], aris[j] = swap(aris[i], aris[j])
}
j++
}
aris[i], aris[begin] = swap(aris[i], aris[begin])
return i
}
func quick_sort(aris []int, begin int, end int) {
if begin+1 < end {
mid := partition(aris, begin, end)
quick_sort(aris, begin, mid)
quick_sort(aris, mid+1, end)
}
}
func rand_array(aris []int, lent int) {
for i := 0; i < lent; i++ {
r := rand.New(rand.NewSource(time.Now().UnixNano()))
aris[i] = r.Intn(1000)
}
}
func main() {
intas := []int{0, 0, 0, 0, 7, 20, 4, 77, 1, 22}
rand_array(intas, 10)
fmt.Println(intas)
quick_sort(intas, 0, 10)
fmt.Println(intas)
}