快速排序
来源:互联网 发布:f22到底有多先进知乎 编辑:程序博客网 时间:2024/06/10 08:06
1、基本思想
1、从数组中选择一个数作为基准
2、分区过程,将把比这个数大的数全放到它的右边,小于它的数放在它的左边
3、再对左右区间进行第二步操作,直到他们区间只有一个数。
一次快排的具体操作:
第一步:取第一个和最后一个元素的指针,并设置一个基准值,比如可以把第一个元素设置为基准,(或者用更复杂的规则生成这个基准,这样有利于排序的稳定性,比如可以选用随机选取基准,或者中间取基准等)
第二步:从后开始往前比较,如果后面的数出现比基准小则放到左边的那个位置,
第三步:从前往后,如果出现比基准大的数则拿到后面取
第四部:把基准放在最后的剩余位置,如此往复
举例:
初始数组:data=[72 6 57 88 60 42 83 73 48 85]初始化:low=0,row=9 proiv=72 //取第一个元素第一步取出72作为基准,从后往前循环,直到出现第一个小于基准的值,则为48,则把48填充到data[i],i=0,i++第二步从前往后开始循环,直到出现第一个大于基准的值,为88,则把88填充到data[j],j=8,重复第一步,直到出现low==row的时候按基准值进行分割,前半部分继续如此,后半部分也如此
2、具体代码实现如下
//data为要排序的数据,low为左边界下标,row为右边界下标func QuickSort(data []int, low, row int) { if low < row { i, j, x := low, row, data[low] for i < j { for i < j && data[j] > x { //从右往左寻找比基准小的数 j-- } if i < j { data[i] = data[j] i++ } for i < j && data[i] < x { //从左往右寻找比基准大的数 i++ } if i < j { data[j] = data[i] j-- } } data[i] = x QuickSort(data, low, i-1) QuickSort(data, i+1, row) }}
sort源码包中的快排实现进过了优化,在元素较少是使用堆排或者希尔插入来排序,为了减少递归深度。
查看博客:
1、白话经典算法系列之六 快速排序 快速搞定
1 0
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 程序设计实训报告--电子词典
- webpack优化
- Python标准模块——subprocess
- Python标准模块——PIL
- 软件工程导复习分析(简化版,不够详细,有干货)
- 快速排序
- 哈夫曼树
- Python标准模块——xml
- 使用protobuf(c++)的构建通用的数据系统(转)
- Python标准模块——math
- 辗转相除法
- Codeforces 460B Little Dima and Equation【思维+暴力】
- 最长严格上升子序列
- VS2010调试运行正常,直接exe运行错误问题