您的位置:首页 > 其它

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

2012-08-11 23:39 204 查看
/**
* 划分算法
* @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成正比。


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: