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

来源:互联网 发布:python爬微博数据 编辑:程序博客网 时间:2024/05/18 00:15
/** * 划分算法 * @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 valueint leftPtr = left - 1  ; int rightPtr = right - 1; while (true){while (leftPtr < right && partitionArr[++leftPtr] < pivot);//find the bigger itemwhile (rightPtr > left && partitionArr[--rightPtr] > pivot);//find the smaller itemif(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成正比。

	
				
		
原创粉丝点击