Java 划分排序
2015-07-29 17:26
483 查看
划分排序:
指定一个关键值key
从左右两边进行循环划分操作,将小于等于key的放左边,大于等于key的放右边
划分后的序列不一定全部有序
O(N) 只有一趟排序
指定一个关键值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]
相关文章推荐
- spring+springmvc+hibernate完整示例
- Java Timer 定时器的使用
- Java自学之路
- eclipse快捷键
- Java中常用的数据库驱动程序名和数据库连接地址
- 在Eclipse的DDMS中查找genymotion模拟器的sdcard中的文件---开发中遇到的问题(一)...
- 在Eclipse的DDMS中查找genymotion模拟器的sdcard中的文件---开发中遇到的问题(一)
- JAVA注解 实现一个简单的sql语句生成器
- java 基础知识小结
- java String.format()的问题
- java实现链表反转
- java的封箱和拆箱
- java.util
- java 存储区
- JAVA基础点汇总(一)
- myclipse web项目 eclipse中不能运行
- Selenium运行环境搭建(Java)
- JAVA的道路 1+...1000
- 004--struts.xml配置详解
- spring各版本下载地址