快速排序
来源:互联网 发布:免费自学会计软件 编辑:程序博客网 时间:2024/06/06 01:10
划分数组
* partition 方法是
* 1.假设轴元素是99 82 100 86 .. . .. 108 90 120 * 指针 从左边走 从右边走 左边元素应该比轴元素99 小,右边应该比99大。 * 那么当它左边走到100时 右边走到90时 会停下来 两者交换位置 * 2.把轴元素移动中间,可以假定数组最右端元素是轴元素 * * 3.返回轴元素的位置 方便后面的排序 * * 4.排序是用递归的方法 * 轴的左边用 sort , 轴的右边也用 sort方法
public static int partition(long arr[],int left, int right,long point) { int leftPtr = left - 1; int rightPtr = right; while(true) { //循环,将比关键字小的留在左端 while(leftPtr < rightPtr && arr[++leftPtr] < point); //循环,将比关键字大的留在右端 while(rightPtr > leftPtr && arr[--rightPtr] > point); if(leftPtr >= rightPtr) { break; } else { long tmp = arr[leftPtr]; arr[leftPtr] = arr[rightPtr]; arr[rightPtr] = tmp; } } //将关键字和当前leftPtr所指的这一个进行交换 long tmp = arr[leftPtr]; arr[leftPtr] = arr[right]; arr[right] = tmp; return leftPtr; }public static void sort(long[] arr, int left, int right) { if(right - left <= 0) { return; } else { //设置关键字 long point = arr[right]; //获得切入点,同时对数组进行划分 int partition = partition(arr, left, right, point); //对左边的子数组进行快速排序 sort(arr,left,partition - 1); //对右边的子数组进行快速排序 sort(arr,partition + 1, right); }
阅读全文
0 0
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- CSDN第一天
- Mac如何安装和使用ctags
- Java计算素数
- 抽象工厂模式
- Windows10内置Linux子系开启指南
- 快速排序
- List 常用方法
- java实现双色球福利彩票系统
- Filesystem Hierachy Standard 文件系统层级标准详解
- DSP28335-GPIO寄存器-(1)
- <HREF>元素/标签
- 101平衡模式 DIR的理解
- SQL-什么是视图及如何使用视图
- spring注入之我见