Java 划分排序
来源:互联网 发布:数据库基础及应用答案 编辑:程序博客网 时间:2024/05/13 18:23
划分排序:
指定一个关键值key
从左右两边进行循环划分操作,将小于等于key的放左边,大于等于key的放右边
划分后的序列不一定全部有序
O(N) 只有一趟排序
/** * 划分 * * @author stone * @date 2015-7-29 下午4:37:16 */ public class Partition {/** * 基于base划分,小的在左,大的在右, 不要求整个序列有序 * * @param ary * @param base */static void sort(int[] ary, int base) {int left = 0;int right = ary.length - 1;int leftpoint = left, rightpoint = right;while (true) {// 分成左右两边同时进行比较,一边从左向右,一边从右向左,while (leftpoint < right && ary[leftpoint++] < base); //leftpoint大于right或ary[leftpoint]>base停止循环while (rightpoint >= left && ary[rightpoint--] > base); //反之System.out.println("左边需要交换的索引:" + (leftpoint-1));System.out.println("右边需要交换的索引:"+ (rightpoint+1));//上面拿到了不符合条件的两个索引,即需要交换的两个索引if (leftpoint - 1 < rightpoint + 1) {//需要交换swap(ary, leftpoint - 1, rightpoint + 1);Util.printArray(ary);leftpoint = left;rightpoint = right;} else {break;}}}private static void swap(int[] ary, int a, int b) {int temp = ary[a];ary[a] = ary[b];ary[b] = temp;}public static void main(String[] args) {int[] ary = Util.generateIntArray(10);System.out.println("原序列:");Util.printArray(ary);sort(ary, 5);System.out.println("排序后:");Util.printArray(ary);}}
原序列:[2, 8, 4, 3, 7, 5, 1, 9, 0, 6]左边需要交换的索引:1右边需要交换的索引:8[2, 0, 4, 3, 7, 5, 1, 9, 8, 6]左边需要交换的索引:4右边需要交换的索引:6[2, 0, 4, 3, 1, 5, 7, 9, 8, 6]左边需要交换的索引:5右边需要交换的索引:5排序后:[2, 0, 4, 3, 1, 5, 7, 9, 8, 6]
0 0
- Java 划分排序
- java双向划分的快速排序
- 快速排序之划分(java)
- 快速排序+划分数组(java实现)
- 算法--Java代码实现快速排序以及三路划分
- 高级排序-划分
- 双向划分的快速排序
- 快速排序的Hoare划分
- 快速排序中的区间划分
- 数据结构-快速排序-划分算法
- 快速排序的三者取中划分
- 快速排序之区间划分
- 快速排序(递归、分治、划分)
- JAVA数据类型的划分
- java的内存划分
- JAVA数据类型的划分
- Java 内存划分
- Java数据类型的划分
- 求素数
- Nginx教程:HTTP Auth Basic模块的使用
- C语言 C++相互调用问题
- 1-3年WEB前端开发工程师
- 兰花施肥、浇水的关键时间
- Java 划分排序
- node-inspector调试node程序
- Christine Daaé
- 生兔子 2个月成熟 成熟的一对兔子生一对
- [Erlang]ERTS的home路径
- python模块以及导入出现ImportError: No module named ‘xxx’问题
- Python 希尔排序
- 会用到的 多文件 flash上传 Web前端 推荐一个Jquery 插件 Uploadify
- 完全数