快速排序的实现(两种)
2016-04-10 20:47
281 查看
package Sort; public class Quick { public static void main(String[] args) { int[] a = {96,68,45,32,21,11,10,9,8,7,3,6}; quick_sort(a,0,a.length-1); for(int i = 0;i < a.length;i++){ System.out.print(a[i]+" "); } } private static void quick_sort(int[] a, int low, int high) {//在发现要找的元素后并不急着就进行位置安放,而是等待另一边也找到合适元素,然后交换。 // TODO Auto-generated method stub if(low > high) return; int i = low, j = high; int temp = a[low]; int t; while(i < j){//保证在进行一次替换位置后如果ij没有相遇,能够继续,直到相遇。。 while(i < j && a[j] >= temp){//这里必须有i<j的限制,要不然如果找不到a[j] >= temp的,就跑出去了 j--; } while(i < j && a[i] <= temp){ i++; } t = a[j]; //这里我省去了判断i<j 然而似乎并没有什么影响 a[j] = a[i]; a[i] = t; } a[low] = a[i]; //交换a[low]和a[i] a[i] = temp; quick_sort(a,low,i-1); quick_sort(a,i+1,high); } // private static void quick_sort(int[] a, int low, int high) {//第一个元素是个缺口,在后面的扫描中只要发现一个要调换位置的元素就放到这个缺口处,然后那个元素原来的位置就是新的缺口 // // TODO Auto-generated method stub //不断发现新的缺口一直调换 // if(low > high) // return; // int i = low,j = high; // int temp = a[low]; // while(i < j){//保证在进行一次替换位置后如果ij没有相遇,能够继续,直到相遇。。 // while(i < j && a[j] >= temp){//必须从右边开始扫描,否则从左边开始扫描遇到一个比它大的元素时 应该放到右边,放到哪里呢,放到任何地方都会覆盖掉一个数据 这样没有利用上这个缺口 严重错误 // j--; // } // a[i] = a[j];//这里我省去了判断i<j 然而似乎并没有什么影响 // while(i < j && a[i] <= temp){ // i++; // } // a[j] = a[i];//这里我省去了判断i<j 然而似乎并没有什么影响 // } // a[i] = temp; //把最开始要进行排序的那个元素放到正确的中间位置。这时,他左边的数比它小,右边的比它大。 // quick_sort(a,low,i-1); // quick_sort(a,i+1,high); // } }
相关文章推荐
- 【数位DP】[CQOI2016]手机号码
- Centos7 Ansible安装
- libcudnn.so.6.5:cannot open sharedobject file: No such file or directory
- 谁是真泛型
- Android - 十分钟理解手机适配 与 lib工程生成包
- 第六周进度报告
- 第四次作业
- 排序注意事项
- 常用的布局和View常用属性
- Eclipse更改主题,换个黑色的背景颜色吧,哈哈
- Ubuntu14.04安装nodejs
- 数据库的恢复
- [LeetCode-91] Decode Ways
- 高效使用 STL
- x&(x-1)的含义
- poj 2299 Ultra-QuickSort(求逆序对)
- Retrofit2的使用简单介绍
- eclipse 常用快捷键
- 《effective java》读书笔记——(一)
- poj 1804 Brainman(求逆序对)