脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Golang - Go语言实现快速排序算法

Go语言实现快速排序算法

2023-05-08 14:18AlwaysBetayongxinz Golang

快速排序使用分治思想,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整

Go语言实现快速排序算法

快速排序是由东尼·霍尔所发明的一种排序算法,时间复杂度是 O(nlogn), 是不稳定排序算法。

快速排序使用分治思想,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

算法演示

通过动图来演示一下这个算法的执行过程:

 

Go语言实现快速排序算法

 

 

  1. 从数列中挑出一个元素,作为基准(pivot)。
  2. 重新排序数列,所有比基准小的值放到基准前面,所有比基准大的值放到基准后面。排序之后,基准值便处于数列的中间位置,这个过程称为分区。
  3. 再递归对两个子序列分别进行排序操作。

Go 语言实现

代码如下:

  1. package main 
  2.  
  3. import "fmt" 
  4.  
  5. func partition(list []int, low, high intint { 
  6.     // 选择基准值 
  7.     pivot := list[high] 
  8.     for low < high { 
  9.         // low 指针值 <= pivot low 指针右移 
  10.         for low < high && pivot >= list[low] { 
  11.             low++ 
  12.         } 
  13.         // low 指针值 > pivot low 值移到 high 位置 
  14.         list[high] = list[low] 
  15.  
  16.         // high 指针值 >= pivot high 指针左移 
  17.         for low < high && pivot <= list[high] { 
  18.             high-- 
  19.         } 
  20.         // high 指针值 < pivot high 值移到 low 位置 
  21.         list[low] = list[high] 
  22.     } 
  23.     // pivot 替换 high 值 
  24.     list[high] = pivot 
  25.     return high 
  26.  
  27. func QuickSort(list []int, low, high int) { 
  28.     if high > low { 
  29.         // 分区 
  30.         pivot := partition(list, low, high) 
  31.         // 左边部分排序 
  32.         QuickSort(list, low, pivot-1) 
  33.         // 右边部分排序 
  34.         QuickSort(list, pivot+1, high) 
  35.     } 
  36.  
  37. func main() { 
  38.     list := []int{2, 44, 4, 8, 33, 1, 22, -11, 6, 34, 55, 54, 9} 
  39.     QuickSort(list, 0, len(list)-1) 
  40.     fmt.Println(list) 

以上就是本文的全部内容。

参考文章:

  • https://mojotv.cn/algorithm/golang-quick-sort。

原文地址:https://mp.weixin.qq.com/s/OaHrvRGyVEWEC4gyONan1Q

延伸 · 阅读

精彩推荐
  • GolangGolang实现gRPC的Proxy的原理解析

    Golang实现gRPC的Proxy的原理解析

    gRPC是Google开始的一个RPC服务框架, 是英文全名为Google Remote Procedure Call的简称,广泛的应用在有RPC场景的业务系统中,这篇文章主要介绍了Golang实现gRPC的...

    Mr.YF11282021-11-17
  • Golang对Go语言中的context包源码分析

    对Go语言中的context包源码分析

    这篇文章主要对Go语言中的context包源码进行分析,context包析是1.15,context包定义了一个Context类型过这个Context接口类型, 就可以跨api边界/跨进程传递一些值...

    zwf1930716642022-09-02
  • GolangAir实现Go程序实时热重载使用过程解析示例

    Air实现Go程序实时热重载使用过程解析示例

    这篇文章主要为大家介绍了Air实现Go程序实时热重载使用过程解析示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪...

    Jeff的技术栈11162022-09-21
  • GolangGo外部依赖包从vendor,$GOPATH和$GOPATH/pkg/mod查找顺序

    Go外部依赖包从vendor,$GOPATH和$GOPATH/pkg/mod查找顺序

    这篇文章主要介绍了Go外部依赖包vendor,$GOPATH和$GOPATH/pkg/mod下查找顺序,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    benben_20158532021-03-06
  • GolangGin golang web开发模型绑定实现过程解析

    Gin golang web开发模型绑定实现过程解析

    这篇文章主要介绍了Gin golang web开发模型绑定实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友...

    陈宏博8502021-01-31
  • Golanggolang中连接mysql数据库

    golang中连接mysql数据库

    这篇文章主要介绍了golang中连接mysql数据库的步骤,帮助大家更好的理解和学习go语言,感兴趣的朋友可以了解下...

    陶士涵9962021-02-21
  • Golang1行Go代码实现反向代理的示例

    1行Go代码实现反向代理的示例

    这篇文章主要介绍了1行Go代码实现反向代理的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    alfred-zhong2242020-05-18
  • Golang详解Go语言RESTful JSON API创建

    详解Go语言RESTful JSON API创建

    这篇文章主要介绍了详解Go语言RESTful JSON API创建,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    WalkerQiao3692020-05-15