分享
  1. 首页
  2. 文章

面试经典算法:快速排序Golang实现

aside section._1OhGeD · · 1338 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

Golang快速排序

定义

快速排序由C. A. R. Hoare在1962年提出。快速排序是对冒泡排序的一种改进,采用了一种分治的策略。

基本思想

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

步骤

  1. 先从数列中取出一个数作为基准数。
  2. 分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
  3. 再对左右区间重复第二步,直到各区间只有一个数。
package main
import "fmt"
/************************************
 *函数名:quicksort
 *作用:快速排序算法
 *参数:
 *返回值:无
 *模拟:
 begin:[]int{12, 85, 25, 16, 34, 23, 49, 95, 17, 61}
 -->[],12,[25 16 34 23 49 95 17 61]
 ---->[23 16 17],25,[95 49 61 85]
 ------>[17 16],23,[]
 -------->[16],17,[]
 ---------->[],16,[]
 ------>[34 49 61 85],95,[]
 -------->[],34,[61 85 95]
 ---------->[49],61,[95]
 ------------>[],49,[]
 ------------>[85],95,[]
 -------------->[],85,[]
 last:[]int{12, 16, 17, 23, 25, 34, 49, 61, 85, 95}
 ************************************/
 
func quicksort(array []int, begin, end int, mark string) {
 var i, j int
 if begin < end {
 i = begin + 1 // 将array[begin]作为基准数,因此从array[begin+1]开始与基准数比较!
 j = end // array[end]是数组的最后一位
 for {
 if i >= j {
 break
 }
 if array[i] > array[begin] {
 array[i], array[j] = array[j], array[i]
 j = j - 1
 } else {
 i = i + 1
 }
 }
 /* 跳出while循环后,i = j。
 * 此时数组被分割成两个部分 --> array[begin+1] ~ array[i-1] < array[begin]
 * --> array[i+1] ~ array[end] > array[begin]
 * 这个时候将数组array分成两个部分,再将array[i]与array[begin]进行比较,决定array[i]的位置。
 * 最后将array[i]与array[begin]交换,进行两个分割部分的排序!以此类推,直到最后i = j不满足条件就退出!
 */
 if array[i] >= array[begin] { // 这里必须要取等">=",否则数组元素由相同的值时,会出现错误!
 i = i - 1
 }
 array[begin], array[i] = array[i], array[begin]
 fmt.Printf("%s>%v,%d,%v\n", mark, array[begin:i], array[i], array[j:end])
 quicksort(array, begin, i, mark+"--")
 quicksort(array, j, end, mark+"--")
 }
}
func main() {
 nums := []int{12, 85, 25, 16, 34, 23, 49, 95, 17, 61}
 fmt.Printf("begin:%#v\n", nums)
 // 缩进
 mark := "--"
 quicksort(nums, 0, len(nums)-1, mark)
 fmt.Printf("last:%#v\n", nums)
}

转载请注明:http://www.lenggirl.com/algorithm/quicksort.html


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:aside section._1OhGeD

查看原文:面试经典算法:快速排序Golang实现

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
1338 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏