博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Quick Sort(Java)
阅读量:6934 次
发布时间:2019-06-27

本文共 1839 字,大约阅读时间需要 6 分钟。

1     public static void main(String[] args) 2     {     3         Scanner input = new Scanner(System.in); 4         int n = input.nextInt(); 5         int[] a = new int[n]; 6          7         for(int i = 0; i < a.length; i++) 8             a[i] = (int)(Math.random() * 100); 9         10         System.out.println("Before sort:");11         //System.out.println(Arrays.toString(a));12         long start = System.currentTimeMillis();13         divide(a, 0, a.length - 1);14         long end = System.currentTimeMillis();15         //10000000个测试数据用时约为550ms  相对于归并排序有较大提升16         System.out.println("After sort: ");17         //System.out.println(Arrays.toString(a));18         System.out.println(end - start);19     }20     21     public static void divide(int[] a, int left, int right)22     {23         if(left >= right)   //大于号防止数组为空24             return;25         26         int value = QuickSort(a, left, right);27         //先处理右半边28         divide(a, value + 1, right);   29         //再处理左半边30         divide(a, left, value - 1);   //分割时不能将value作为边界 否则排序数字相同的数组会导致无限递归31     }32     33     public static int QuickSort(int[] a, int left, int right)34     {35         int i = left, j = right + 1;36         int key = a[left];37         38         while(true)39         {    40             while(a[--j] > key)41                 if(j == left)   //该判断其实是冗余的 可以去掉42                     break;43             while(a[++i] < key)44                 if(i == right) 45                     break;46             if(i >= j)   //不判断相等的情况会导致数组下标越界(传入两个相同的元素) 47                 break;48             int temp = a[j];49             a[j] = a[i];50             a[i] = temp;51         }52         53         int t = a[left];54         a[left] = a[j];55         a[j] = t;56         return j;57     }

 

转载于:https://www.cnblogs.com/Huayra/p/10539933.html

你可能感兴趣的文章
完美数据迁移-MongoDB Stream的应用
查看>>
http2-stream-optima-prioritation
查看>>
spring事件驱动模型--观察者模式在spring中的应用
查看>>
MySQL性能优化速记
查看>>
十问 | 关于Service Mesh 和Kubernets的最前沿思考
查看>>
你必须非常努力,才可以看起来毫不费力。
查看>>
Maven就是这么简单
查看>>
css loading
查看>>
不能ssh连接ubuntu linux 服务器 secureCRT不能ssh连接服务器 不能远程ssh连接虚拟机的ubuntu linux...
查看>>
使用Android BindingAdapter与InverseBindingAdapter实现SeekBar双向(正向/反向)数据绑定...
查看>>
Expect 安装 on centos7
查看>>
VM虚拟机的配置文件(.vmx)损坏修复
查看>>
RxJava/RxAndroid : doAfterNext
查看>>
利用graphviz模块展示斐波那契数列的递归函数调用图(Python)
查看>>
标准模板库(STL)学习指南之map映射
查看>>
CentOS7.X的系统管理、安全设置及系统优化思路
查看>>
npm全局安装和本地安装和本地开发安装(npm install --g/--save/--save-dev)
查看>>
20个非常有用的Java程序片段
查看>>
喧喧发布 2.5.2 版本,主要修复已知问题
查看>>
人工智能技术在移动互联网发展中的应用
查看>>