划分算法(快速排序的根基)

/**
 * 划分算法
 * @author Demon
 *
 */
public class Partition {
	static int [] partitionArr = new int [] {0,3,9,0,9,1,3,4,51,10}; //初始化测试数组
	/**
	 * 划分算法(PIVOT默认选择数组最右端)
	 * @param partitionArr
	 * @param left
	 * @param right
	 */
	private static int partition(int left, int right) {
		int pivot = partitionArr[right-1]; // pivot value
		int leftPtr = left - 1  ; 
		int rightPtr = right - 1; 
		while (true){
			while (leftPtr < right && partitionArr[++leftPtr] < pivot);//find the bigger item
			while (rightPtr > left && partitionArr[--rightPtr] > pivot);//find the smaller item
			if(leftPtr >= rightPtr){ // leftPtr > rightPtr break;
				break;
			}else {
				swap(partitionArr,leftPtr,rightPtr); //if the first while find the bigger and the second find the smaller swap it
			}
		}
		return leftPtr;
	}
	/**
	 * 交换
	 * @param partitionArr
	 * @param leftPtr
	 * @param rightPtr
	 */
	private static void swap(int[] partitionArr, int leftPtr, int rightPtr) {
		int temp = partitionArr[leftPtr];
		partitionArr[leftPtr] = partitionArr[rightPtr];
		partitionArr[rightPtr] = temp;
	}
	/**
	 * test main
	 * @param args
	 */
	public static void main(String[] args) {
		int partitionInt = partition(0,partitionArr.length);
		System.out.println("partitionInt:"+partitionInt);
		System.out.println("length:"+partitionArr.length);
		for (int i : partitionArr) {
			System.out.print(" "+i);
		}
	}
}




 不过多解释直接上code。

以上代码如有问题欢迎指点后续还会更新快速排序。(在快速排序会有更详细的说明)

最后说下划分算法的效率应为O(N)leftPtr与rightPtr分别从数组两端移动,如满足条件移动停止进行交换,当leftPtr与rightPtr相与则划分完成。运行的时间和N成正比。


   

你可能感兴趣的:(算法,String,测试,Class,PIVOT)