划分算法(快速排序的根基)
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成正比。
相关文章推荐
- 基础算法(2):快速排序(随机划分+三数取中划分+ 随机三数取中划分+尾递归)
- 快速排序的算法导论划分形式和hoare划分
- 数据结构与算法之七(划分算法与快速排序)
- Algorithm--让人困惑的快速排序(划分算法)
- // 快速排序中的划分 ,<<数据结构》算法10.6(b)
- Algorithm--让人困惑的快速排序(划分算法) 续
- 快速排序(2)算法改进--小的子文件、三者取中、重复关键字三路划分
- 基础算法(2):快速排序(随机划分+三数取中划分+ 随机三数取中划分+尾递归)
- 排序算法之快速排序
- 算法和数据结构---排序---快速排序
- PHP四种基础算法详解(冒泡排序、选择排序、插入排序、快速排序)
- 算法学习(二)——快速排序(Java实现)
- 递归求解整数划分问题 分类: 算法 2014-09-25 21:37 158人阅读 评论(0) 收藏
- java基本算法之快速排序
- 算法之快速排序
- 算法:集合的划分原理及代码实现
- JAVA基本算法------冒泡、插入、快速排序
- stage划分算法
- 【坐在马桶上看算法】算法3:最常用的排序——快速排序
- php算法之快速排序