java之快速排序
来源:互联网 发布:樱井知香ed2k file 编辑:程序博客网 时间:2024/05/01 19:33
- 快速排序(采用的是一种分治的策略)
- 先从数列中取出一个数作为基准数。
- 分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
- 再对左右区间重复第二步,直到各区间只有一个数。
- 实战
有这样一个数组:
int arr[]={ 5,7,4,6,3,9,2 }
快速排序是这样的:
就以 0 号位的值 5 作为及基准数。顺便要虚拟一个临时变量 key 来存放这个基准数 int key =arr[0]。虚拟一个变量用来存放下一次从左边往右找的起始位置 int left=0;虚拟一个变量用来存放下一次从右边往左找的起始位置 int right=6;首先 从右边int right=6开始找第一个 比 5 小的数,发现 6号位的值2 比5小,然后将6号位的值赋给0号位,此时int right=5,int left=0; arr是这样的 { 2,7,4,6,3,9,2 }, 由于6号位的值2已经赋给1号位了,此时6号位需要一个值。那就从arr数组左边int left=0开始找第一个符合值大于5的,发现1号位的值7大于5,此时将1号位的7赋值给6号位,此时int right=5,int left=2;arr是这样的:{ 2,7,4,6,3,9,7 },依此类推,从右边int right=5找第一个小于5的值,发现了4号位的值3符合条件,赋值完后,此时int right=3,int left=2;arr是这样的:{ 2,3,4,6,3,9,7 },再次从左边找第一个大于5的值,发现3号位的值6符合条件,赋值完后,此时int right=3,int left=4;arr是这样的:{ 2,3,4,6,6,9,7 },由于left>right,说明继续找下去,查找的范围已经交叉了,所以没有必要,将key的值赋给3号位,此时arr是这样的{ 2,3,4,5,6,9,7 }此时基本的已经分出来了,以 5 为基准 可以看作两部分,分别是{ 2,3,4 },{ 6,9,7 },再次用刚才的方法<这样叫递归>就可以最终顺利得到答案。
- 代码
首先虚拟些变量来做事: int key = arr[0] int left = 0; int right = arr.length; 在什么情况下不用再次查找: if(left<right){} 从右向左找第一个符合条件的数,并且赋值 while(arr[right]>key&&left<right){ right--; } if(left<right){ arr[left++]=arr[right]; } 从左向右找第一个符合条件的数,并且赋值 while(arr[left]<key&&left<right){ left--; } if(left<right){ arr[right++]=arr[left] } 最后不符合条件left<right,就将赋值 while(left<right){ arr[left]=key; } 第一次就分好了,就下来就是再次调用自己。
得写个方法
由于要调用自己,所以写个方法;private static void quick_sort(int s[], int l, int r) { if (l < r) { int i = l, j = r, x = s[l]; while (i < j) { while(i < j && s[j] >= x) j--; if(i < j) s[i++] = s[j]; while(i < j && s[i] < x) i++; if(i < j) s[j--] = s[i]; } s[i] = x; quick_sort(s, l, i - 1); // 递归调用 quick_sort(s, i + 1, r); // 递归调用 } }
0 0
- 快速排序之Java
- java之快速排序
- java之快速排序
- java之快速排序
- Java之快速排序
- java排序之快速排序
- Java 排序之 快速排序
- java排序之快速排序
- Java 排序之 快速排序
- Java排序之【快速排序】
- java排序之 --- 快速排序
- JAVA 数据结构之快速排序
- JAVA版 之 快速排序
- java基础之快速排序
- 快速排序之Java实现
- JAVA语言之快速排序
- Java数据结构之快速排序
- 快速排序之java实现
- windows下安装python+eclipse
- android获得在SurfaceView上滑动距离
- 德莱联盟
- app开发的一些思路
- iOS开发:音频播放、录音、视频播放、拍照、视频录制
- java之快速排序
- 匿名内部类
- jblas-1.2.4.jar : spark第三方依赖打包
- extjs监听获取焦点重新赋值
- Android listView 的适配器adapter.notifyDataSetChanged();刷新没有作用
- 启动 webLogic的时候有错误 此时不应有 \Java\jdk\lib\dt.jar
- [心得]——2016-05-06
- 第九周-程序阅读
- 安卓实现高斯模糊