package main

import "fmt"

// 快速排序
// 特征:
// 1. 选定一个数,让这个数左边的比这个数小,右边比这个数大
// 2. 然后这个基数就是已经排好序的,将左边部分和右边部分执行1操作
// 3. 递归
// 实现:
// 1. 难点:
// a. 参考数怎么找?
// b. 如何让这个数左边的数比这个数小,右边的数比这个数大(最难的部分) => 填坑大法
// c. 递归的退出条件 // QuickSort 快速排序
func QuickSort(nums []int, left, right int) {
// 1. refer 参考数,一般等于元组中第一个元素
refer := nums[left]
loopFlag := true
// 2. 让这个数左边的比这个数小,右边比这个数大
for loopFlag {
// 1. 先在右边找比查考数小的数,找到则赋值给左边
for {
if left == right {
// 如果两者相等,意味着目标达成,这个位置的数就是已经拍好序的
nums[left] = refer
loopFlag = false
break
}
if nums[right] >= refer {
right --
} else {
// 3. 在右边找到则将值赋值给
nums[left] = nums[right]
break
}
} // 2. 先在左边找比参考数大的数,赋值给右边
for {
// 如果两者相等,意味着目标达成,这个位置的数就是已经排好序的
if left == right {
nums[left] = refer
loopFlag = false
break
} if nums[left] <= refer {
left ++
} else {
// 3. 在右边找到则将值赋值给
nums[right] = nums[left]
break
}
}
}
//fmt.Println(left, right)
// 左边部分
leftPart := nums[:left]
// 右边部分
rightPart := nums[right+1:]
//fmt.Println("left:", leftPart)
//fmt.Println("Right:", rightPart)
// 左边不为空则排序
if len(leftPart) != 0 {
QuickSort(leftPart, 0, len(leftPart)-1)
}
// 右边不为空则排序,也是递归的退出条件
if len(rightPart) != 0 {
QuickSort(rightPart, 0, len(rightPart)-1)
} } func main() {
//nums := []int{64, 5, 2, 44, 22, 45, 22, 666 , 22, 77, 3, 64, 74, 74, 73, 22, 43, 23,56, 77, 777}
//nums := []int{56, 5, 2, 44, 22, 45, 22, 23, 22, 43, 3, 64, 22}
//nums := []int{56, 5, 2, 44, 45, 22, 23, 43, 3, 64}
//nums := []int{3, 5, 2, 44, 45, 22, 23, 43}
nums := []int{64}
//nums := []int{64, 33}
//nums := []int{64, 33, 55}
QuickSort(nums, 0, len(nums)-1)
fmt.Println(nums)
}

  

Go-快速排序的更多相关文章

  1. [C#][算法] 用菜鸟的思维学习算法 -- 马桶排序、冒泡排序和快速排序

    用菜鸟的思维学习算法 -- 马桶排序.冒泡排序和快速排序 [博主]反骨仔 [来源]http://www.cnblogs.com/liqingwen/p/4994261.html  目录 马桶排序(令人 ...

  2. 算法与数据结构(十六) 快速排序(Swift 3.0版)

    上篇博客我们主要聊了比较高效的归并排序算法,本篇博客我们就来介绍另一种高效的排序算法:快速排序.快速排序的思想与归并排序类似,都是采用分而治之的方式进行排序的.快速排序的思想主要是取出无序序列中第一个 ...

  3. [算法]——快速排序(Quick Sort)

    顾名思义,快速排序(quick sort)速度十分快,时间复杂度为O(nlogn).虽然从此角度讲,也有很多排序算法如归并排序.堆排序甚至希尔排序等,都能达到如此快速,但是快速排序使用更加广泛,以至于 ...

  4. 排序算法----调用库函数qsort进行快速排序

    功 能: 快速排序 头文件:stdlib.h 用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const ...

  5. Html5 快速排序演示

    快速排序(Quicksort)是对冒泡排序的一种改进.快速排序由C. A. R. Hoare在1962年提出. 它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另 ...

  6. Java 快速排序两种实现

    快速排序,只要学习过编程的人肯定都听说过这个名词,但是有时候写的时候还真蒙住了,网上搜罗了下以及查阅了"introduction to algorithm",暂时找到两种实现快排的 ...

  7. java基础算法之快速排序

    快速排序(Quicksort)是对冒泡排序的一种改进.在大学学过之后现在基本忘了,最近在好多地方都看到说快速排序在面试会问到,于是自己也准备重新拾起以前忘记的东西来,慢慢的积累自己的基础知识.figh ...

  8. PAT 1045. 快速排序(25)

    著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边. 给定划分后的N个互不相同的正整数的排列,请问有多 ...

  9. 快速排序中的partition函数的枢纽元选择,代码细节,以及其标准实现

    很多笔试面试都喜欢考察快排,叫你手写一个也不是啥事.我很早之前就学了这个,对快速排序的过程是很清楚的.但是最近自己尝试手写,发现之前对算法的细节把握不够精准,很多地方甚至只是大脑中的一个映像,而没有理 ...

  10. php冒泡排序和快速排序

    如有错误,请指出... //快速排序(array_merge整合数组)function quick_sort($arr){ $num=count($arr); if($num<=1){ retu ...

随机推荐

  1. ElasticSearch之cat indices API

    命令样例如下: curl -X GET "https://localhost:9200/_cat/indices?v=true&pretty" --cacert $ES_H ...

  2. ChatGPT 沦为了我的打工仔

    大家好,我是老章 最近在折腾之前搞的R-bookdown网站.Jekyll博客,还有刚上了Astro做的周刊.Astro Starlight做的文档站 R2ML:https://r2ml.zhangl ...

  3. Java 中时间对象的序列化

    在 Java 应用程序中,时间对象是使用地比较频繁的对象,比如,记录某一条数据的修改时间,用户的登录时间等应用场景.在传统的 Java 编程中,大部分的程序员都会选择使用 java.uti.Date ...

  4. Java 注解的实现原理

    注解的本质 在 java.lang.annotation.Annotation 接口中有这样的描述: The common interface extended by all annotation i ...

  5. 22、Scaffold属性 抽屉菜单Drawer

    在Scaffold组件里面传入drawer参数可以定义左侧边栏,传入endDrawer可以定义右侧边栏.侧边栏默 认是隐藏的,我们可以通过手指滑动显示侧边栏,也可以通过点击按钮显示侧边栏. class ...

  6. 解析数仓lazyagg查询重写优化规则

    摘要:为了降低调优难度,提升产品易用性,GaussDB(DWS)提供了lazyagg查询重写优化规则. 本文分享自华为云社区<GaussDB(DWS) lazyagg查询重写优化解析[这次高斯不 ...

  7. 想从单体架构演进到分布式架构,SBA 会是一个不错的选择

    摘要:SBA 可以看成是单体架构和微服务架构之间的一个折中方案,它也是按照业务领域进行服务划分,但服务划分的粒度相比微服务要更粗.从单体架构演进到 SBA,会比直接演进到微服务架构更加容易. 本文分享 ...

  8. gis经纬度坐标转换多格式兼容:支持字符串/数组/GeoJSON

    格式 let coordinatesStrReg = /((-*[1][0-9]{0,2}|0)(\.[0-9]{1,6})*),\s{0,2}((-*[1-9][0-9]{0,1}|0)(\.[0- ...

  9. storybook组件属性详解:组件props到strorybook Args

    首先我们查看官方文档:https://storybook.js.org/docs/vue/writing-docs/doc-block-argstable#customizing 官方的例子么有看到v ...

  10. 资源成本降低60%!火山引擎ByteHouse助力数字营销平台仟传网络降本增效

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群   近日,中国知名内容社交平台整合营销企业仟传网络与火山引擎ByteHouse达成合作.仟传网络将通过火山引擎By ...