最朴素的快速排序算法

来源:互联网 发布: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


原创粉丝点击