快速排序
来源:互联网 发布:java事务怎么实现 编辑:程序博客网 时间:2024/06/04 00:23
思想
取一个值作为基准,将比其大的放左边,小的放右边,利用分治法思想,将其分拆合并
实现思路
一、以第一个数作为基准数,从左侧开始扫描
二、第二个数及以后的数都与第一个数比较,如果比基准数小则放到小区,比基准数大则发放到大区
三、如果比基准数小,则替换离基准数最近的大数,如果比基准数大则不动
四、扫描完后,以基准数替换最后一个小区里的数
实现代码
package sort;import java.util.Random;public class QuickSort { /** * 快速排序:取一个值作为分界将比其大的放左边,小的放右边,利用分治法思想,将其分拆合并 * 百万随机数排序 136毫秒;千万级耗时1483毫秒; * @param arr */ public static void quickSort(int[] arr){ quickSort(arr,0,arr.length-1); } /** * 这个重载方法用来实现递归,从分区方法取得的@pos可作为调用递归的begin或者end,但pos不必再加入排序 * @param arr * @param begin * @param end */ private static void quickSort(int[] arr,int begin,int end){ if(begin<end){ int pos = partition(arr,begin,end); quickSort(arr,begin,pos-1); quickSort(arr,pos+1,end); } } /** * 分区方法:利用pivot=arr[begin]的值作为标准,将比pivot大的值放右边小的放左边 * @param arr * @param begin * @param end * @param pivot:分界值 * @param pos 定位最后一个比pivot小的值 * @return */ private static int partition(int[] arr,int begin,int end){ int pivot = arr[begin]; int pos = begin; /* * int i = begin + 1; * begin 的值作为分界值,不用参与比较交换 */ for(int i = begin+1;i<=end;i++){ if(arr[i]<=pivot){ pos++; if(i!=pos){ swap(arr,pos,i); } }· } /* * arr[pos]代表比pivot小的某个值; * arr[begin]是pivot的值 * 为保证左边比pivot小,右边比pivot大 ,需要交换 */ swap(arr,pos,begin); return pos; } /* *数值交换 */ private static void swap(int[] arr, int i, int j) { int tem; tem = arr[i]; arr[i] = arr[j]; arr[j] = tem; } public static void main(String[] args) {// int[] arr = {8,5,6,7,2,3}; int[] arr = new int[10000000]; for(int i = 0; i < arr.length; i++){ arr[i] = new Random().nextInt(10000000); } long startTime=System.currentTimeMillis(); QuickSort.quickSort(arr); long endTime=System.currentTimeMillis(); System.out.println("时间"+":"+(endTime-startTime));//// for ( int i : arr ) {// System.out.println(i);// } }}
阅读全文
0 0
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 机器学习之-利用svm(支持向量机)分类(opencv3)
- WEB请求过程
- 自定义tableview索引,字母搜索
- 打印九九乘法表
- eclipse安装阿里巴巴插件
- 快速排序
- gsoap使用总结
- Python装饰器
- java 网络客户机与服务器的交互
- 搜狗浏览器的技巧
- js中那些让你不知所措的闭包
- Microsoft VBScript 运行时错误 错误 '800a0046' 没有权限
- Codeforces Round #442 (Div. 2) C. Slava and tanks
- spring boot——logback基本配置