快速排序java实现(两种方式)

package com.prince.algorithm;




public class QuickSort {
	public static void sort(Comparable[] a) {
		//使用shuffle消除对输入的依赖
	}
	
	private static void sort(Comparable[] a,int low,int high) {
		if(high<=low)return;
		int j = partition(a,low,high);  // 先切分
		sort(a,low,j-1);    //左部分排序
		sort(a,j,high);   //右部分排序
	}
	
	
	/**
	 * 三向切分的快速排序,处理多重复元素的数组
	 * 从左到右遍历数组一次,维护一个指针lt使得a[low..lt-1]中的元素都小于v,
	 * 一个指针gt使得a[gt+1..high]中的元素都大于v,一个指针i使得a[lt..i-1]中
	 * 元素都等于v,a[i..gt]中的元素未确定
	 * a[i]小于v,将a[lt]和a[i]交换,将lt和i加1;
	 *a[i]大于v,将a[gt]和a[i]交换,将gt减1;
	 *a[i]等于v,将i加1;
	 * @param a
	 * @param low
	 * @param high
	 */
	private static void sort3way(Comparable[] a,int low,int high) {
		if(high<=low) return;
		int lt = low, i = low+1, gt = high;
		Comparable v = a[low];
		while(i<=gt)
		{
			int cmp = a[i].compareTo(v);
			if(cmp<0) exch(a,lt++,i++);
			else if(cmp>0) exch(a,i,gt--);
			else i++;
		}  //现在a[low..lt-1]=j)break;
			exch(a,i,j);
		}
		exch(a,low,j);  //将v=a[j]放入正确的位置
		return j;
	}
	
	private static boolean less(Comparable v,Comparable w) {
		return v.compareTo(w)<0;
	}
	
	private static void exch(Comparable[] a, int i, int j) {
		Comparable t = a[i];
		a[i] = a[j];
		a[j] = t;
	}
	
	private static void show(Comparable[] a) {
		//在单行中打印数组
		for(Comparable temp:a) {
			System.out.println(temp);
		}
	}
	
	public static boolean isSorted(Comparable[] a){
		for(int i=1;i

 

你可能感兴趣的:(快速排序java实现(两种方式))