最朴素的快速排序算法
来源:互联网 发布:java 网校 源码 编辑:程序博客网 时间:2024/05/16 11:01
package mz.ds.sort;import java.util.List;/** * 快速排序算法 */public class QuikSort <T extends Comparable<T>>{/** * 待排序集合 */private List<T> list;public QuikSort(List<T> list) {this.list =list;}public List<T> quiksort() {if (list == null || list.size() ==0) {return null;}_quiksort(0, list.size()-1);return list;}/** * 快速排序算法 * @param low * @param high */private void _quiksort(int low, int high) {if (low < high) {// 整理对象集合,并获取枢轴 的位置int pivot =_partition(low, high);// 整理左边_quiksort(low, pivot-1);// 整理右边_quiksort(pivot+1, high);}}/** * 将要排序的集合一分为二, * 默认枢轴的大小为low位置上的对象 * * @param low 低位置 * @param high 高位置 * @return 枢轴位置 */private int _partition(int low, int high) {// 枢轴 暂时设定就取第一个对象T pivotObj =list.get(low);// 从表两端交替扫描while(low < high) {// 从尾部向头部扫描while (low < high && list.get(high).compareTo(pivotObj) >=0) {--high;}// 将扫描到的小于枢轴的对象放到枢轴处list.set(low, list.get(high));// 从头部向尾部扫描while (low < high && list.get(low).compareTo(pivotObj) <=0) {++low;}// 将扫描到的大于枢轴的对象放到尾部list.set(high, list.get(low));}list.set(low, pivotObj);return low;}}
试一下:
package mz.ds.sort;import java.util.ArrayList;import java.util.List;public class TestMain {public static void main(String[] args) {List<Integer> list =new ArrayList<Integer>();// 初始化 要排序的集合,默认10个100以内的整数for (int i=0; i< 50; ++i) {list.add((int)(Math.random()*100));}printList(list);// 测试快速排序QuikSort<Integer> sort =new QuikSort<Integer>(list);List<Integer> slist =sort.quiksort();printList(slist);}public static void printList(List<Integer> list) {for (int i=0; i<list.size(); ++i) {System.out.print(list.get(i) +"\t");if ((i+1)%10 ==0) {System.out.println();}}System.out.println();}}
输出结果:
4586759978419602607781395614475983973711166681750719443259411755226377289974581923356355756943300359111117252626333537393941434344454550525656576166687171727375757577788181868992949496979899
- 最朴素的快速排序算法
- 排序算法---最常用的快速排序
- 最常用的排序:快速排序算法
- 最朴素的prim算法
- 算法3:最常用的排序——快速排序
- 算法3:最常用的排序——快速排序
- 【坐在马桶上看算法】算法3:最常用的排序——快速排序
- 【坐在马桶上看算法】算法3:最常用的排序——快速排序
- 【坐在马桶上看算法】算法3:最常用的排序——快速排序
- 【啊哈!算法】算法3:最常用的排序——快速排序
- 【啊哈!算法】算法3:最常用的排序——快速排序
- 【坐在马桶上看算法】算法3:最常用的排序——快速排序
- 算法排序之最常用的排序--快速排序(Quick Sort)
- 坐在马桶上学算法@最常用的排序——快速排序
- 轻松学算法3:最常用的排序——快速排序
- 【常用排序算法】以最简单的方式理解快速排序
- 最常用的排序--快速排序
- 我见过最通俗易懂的快速排序过程讲解,转自《坐在马桶上看算法:快速排序》
- LeetCode题解:Longest Palindromic Substring
- Solaris下FTP服务配置
- 由《打印九九乘法表,要求只能用一个变量》想到的
- 【黑马程序员】 MyEclipse 快捷键大全,麻麻再也不用担心我打字慢了 --By寻找资拥
- 【色度学】 颜色
- 最朴素的快速排序算法
- LeetCode题解:ZigZag Conversion
- 退役贴
- LeetCode题解:String to Integer (atoi)
- 安装CentOS 6.4 minimal desktop 之后要做的事——针对嵌入式开发
- Android系统自带图标调用方法
- PHP获取文件后缀名的三种方法
- php 读取文件头判断文件类型的代码
- php防止表单的重复提交