[Go] Golang练习项目-快速排序的GO语言实现

快速排序首先选一个基准(你也可以认为是要放到排序后数组正确位置的元素)pivot,然后将数组按照选取的基准 pivot 进行划分。而选取 pivot 的方式又有很多种,所以快速排序具有很多版本。


总是选择第一个元素作为基准 pivot;
总是选择最后一个元素作为基准;(本文后续的实现就是依次为例)
随机的选择一个元素作为基准;
选择最中间的元素作为基准;

快速排序的关键是划分 partion() 。每一趟划分,我们就可以将作为 pivot 的值 x 放到排序数组的正确位置,并且将所有比 x 小的放到 x 的左边,所有比 x 大的元素放到 x 的右边。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package tools
//划分
func partition(arr *[]int,left int,right int)int{
    privot:=(*arr)[right]
    i:=left-1
    for j:=left;j<right;j++{
        if (*arr)[j]<privot{
            i++
            temp:=(*arr)[i]
            (*arr)[i]=(*arr)[j]
            (*arr)[j]=temp
        }
    }
    temp:=(*arr)[i+1]
    (*arr)[i+1]=(*arr)[right]
    (*arr)[right]=temp
    return i+1
}
//递归
func QuickSort(arr *[]int,left int,right int){
    if left>= right{
        return
    }
    privot:=partition(arr,left,right)
    QuickSort(arr,left,privot-1)
    QuickSort(arr,privot+1,right)
}  

测试用例:

1
2
3
4
5
6
7
8
9
10
11
12
package tools
 
import (
    "testing"
)
 
func TestQuickSort(t *testing.T) {
    arr:=[]int{1,8,3,9,4,5,4,7}
    t.Log(arr)
    QuickSort(&arr,0,len(arr)-1)
    t.Log(arr)
}

go test -v sorts_test.go sorts.go

  

文章转载自公众号(景寓)

posted @   唯一客服系统开发笔记  阅读(628)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2019-08-17 [小程序]小程序框架的简单页面布局
点击右上角即可分享
微信分享提示
1
chat with us