快速排序算法
来源:互联网 发布:蓝光 刻录 数据 编辑:程序博客网 时间:2024/06/06 13:22
快速排序算法是基于分治策略的另一个算法。其基本思想是,对于输入的子数组 a[p:r],按照以下三个步骤进行排序。
①分解(divide):以 a[p] 为基准元素将 a[p:r] 划分为3段 a[p:q-1],a[q],a[q+1:r],使得 a[p:q-1] 中的任何元素小于等于 a[q],使得 a[q+1:r] 中的任何元素大于等于 a[q]。
②递归求解:通过递归调用快速排序算法,分别对 a[p:q-1],a[q+1:r] 进行排序。
③合并:由于对 a[p:q-1] 和 a[q+1:r] 的排序是就地进行的,所以在 a[p:q-1] 和 a[q+1:r] 都已排好的序后不再需要执行任何计算,a[p:r] 就已排好序。
基于这个思想,可实现快速排序算法如下:
private static void quickSort(int p, int r) { if(p<r) { int q = partition(p,r); quickSort(p,q-1); quickSort(q+1,r); } }
在main函数中只需要用数组对象,调用quickSort()方法即可。
private static int partition(int p, int r) { int i = p; int j = r+1; Comparable x = a[p]; //将<x的元素交换到左边区域 //将>x的元素交换到右边区域 while(true) { while(a[++i].compareTo(x)<0 && i<r); while(a[--j].compareTo(x)>0); if(i>=j) break; MyMath.swap(a,i,j); } a[p] = a[j]; a[j] = x; return j; }
上述算法中的partition,以确定的基准元素 a[p] 对子数组 a[p:r] 进行划分,它是快速排序算法的关键。
阅读全文
0 0
- 排序算法--快速排序
- 排序算法--快速排序
- 排序算法---快速排序
- 排序算法-快速排序
- 排序算法------快速排序
- 排序算法---快速排序
- 排序算法-快速排序
- 排序算法---快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 排序算法:快速排序
- 排序算法 快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 【排序算法】快速排序
- 排序算法--快速排序
- 排序算法:快速排序
- 如何过一天,其实就是如何过一生
- 2017/09/03简单搭建SSM框架
- 看透“0”、“1”逻辑,轻松解决Python中文乱码
- ZooKeeper_10_ZooKeeper典型应用场景
- 嵌入式系统的开发-5.1
- 快速排序算法
- [编程题] 最大和
- P1092 虫食算
- pandas中grouopby使用(一)
- Java用jmatio读取MAT文件
- Chrome 错误代码:ERR_UNSAFE_PORT
- C#序列化与反序列化
- 代价函数 交叉熵
- Redis 备份,容灾及高可用实战