1 //三向切分的快速排序
 2 //这种切分方法对于数组中有大量重复元素的情况有比较大的性能提升
 3
 4 public static void main(String[] args)
 5 {
 6     Scanner input = new Scanner(System.in);
 7     int n = input.nextInt();
 8     int[] a = new int[n];
 9
10     for(int i = 0; i < a.length; i++)
11     a[i] = (int)(Math.random() * 100);
12     //System.out.println(Arrays.toString(a));
13     long start = System.currentTimeMillis();
14     qsort3way(a, 0, a.length - 1);
15     long end = System.currentTimeMillis();
16     //System.out.println(Arrays.toString(a));
17     System.out.println(end - start);
18     //10000000个测试数据用时350ms 相比普通快速排序提升约35%的性能
19 }
20
21 public static void qsort3way(int[] a, int front, int rear)
22 {
23     if(front >= rear)
24     return;
25
26     int key_index = front, i = front + 1, j = rear;
27     while(i <= j)
28     {
29     if(a[i] < a[key_index])   //key_index永远指向第一个key值
30         swap(a, i++, key_index++);
31     else if(a[i] > a[key_index])
32         swap(a, i, j--);
33     else   //a[i] = a[key_index]
34         i++;
35     }
36
37     qsort3way(a, front, key_index - 1);
38     qsort3way(a, j + 1, rear);
39 }

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

Quick Sort(三向切分的快速排序)(Java)相关推荐

  1. 《Algorithms》Comparable 实现快速排序三向切分的快速排序

    快速排序 快速排序的切分 完整的快速排序 三向切分的快速排序(快排的改进版) 快速排序是目前使用最广泛的排序,同时也是目前最快的排序,它也体现了分治的思想:将数组分成两部分,并分别独立地进行排序,和归 ...

  2. 快速排序 Quick Sort

    快速排序 Quick Sort 我们已经知道,在决策树计算模型下,任何一个基于比较来确定两个元素相对位置的排序算法需要Ω(nlogn)计算时间.如果我们能设计一个需要O(n1ogn)时间的排序算法,则 ...

  3. 快排Java代码实现(Quick Sort)

    1.  快排算法思路 基本思想:通过一趟快速排序将待排数组分割成独立的两份部分; 其中一部分数组的值均比另一部分数组的值小,则可分别对着两部分数组继续进行排序,以达到整个序列有序. 快排的平均时间复杂 ...

  4. 排序——快速排序(Quick sort)

    概况 快速排序(Quick sort)是对冒泡排序的一种改进.快速排序由C. A. R. Hoare在1960年提出. 算法思路 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比 ...

  5. C#,双向链表(Doubly Linked List)快速排序(Quick Sort)算法与源代码

    双向链表 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱.所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点.一般我们都构造双 ...

  6. 【排序算法】快速排序(Quick Sort)

    快速排序(Quick Sort)使用分治法算法思想. 快速排序介绍 它的基本思想是: 选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分:其中一部分的所有数据都比另外一部分的所有数据都要小. ...

  7. Golang TDD实践报告:快速排序Quick Sort

    Golang TDD实践报告:快速排序Quick Sort [阅读时间:约5分钟] 0.项目需求 1.编写符合项目输入输出的一个测试 2.尝试运行测试 3.先使用最少的代码来让失败的测试先跑起来 4. ...

  8. python实现迭代的快速排序(Iterative Quick Sort)

    python实现迭代的快速排序(Iterative Quick Sort) 快速排序(Quicksort)是对冒泡排序算法的一种改进. 快速排序由C. A. R. Hoare在1960年提出.它的基本 ...

  9. PAT甲级1101 Quick Sort:[C++题解]DP、快速排序划分个数、快排

    文章目录 题目分析 题目来源 题目分析 来源:acwing 题意重述:快排的原理,给定一个序列,请判断其中几个数可以作为快速排序划分步骤的分界点. 分界点充分必要条件是:左边的数都比它小,右边的数都比 ...

最新文章

  1. OSI第七层:应用层功能及介绍
  2. 一套代码小程序WebNative运行的探索01
  3. 【noi 2.5_8465】马走日(dfs)
  4. java Scanner具有神奇的作用可惜大部分java开发人员不知
  5. 【转】CSS 与 HTML5 响应式图片
  6. 进入公司前与Boss的会谈话
  7. 2018年数据中心行业三大发展趋势
  8. restTemplate踩过的坑-spring clound--cloud内部服务调用重试次数
  9. dotnetcore+vue+elementUI 前后端分离架 二(后端篇)
  10. bootstrap-表单
  11. Json.Net Demo2
  12. 软件工程专业指导4(方法)
  13. js中如何把字符串转化为对象、数组示例代码
  14. 接口做的好怎么形容_大连SIEMENS西门子M174接口plc模块
  15. Java_学生信息管理系统——数组版——初次编写
  16. python验证软件签名
  17. 怎么将图片转成html,一种将图片转成HTML文档的方法与流程
  18. 荷兰版《口袋妖怪GO》:不找小精灵,找免费啤酒!
  19. 高通SDX12:SFE(shortcut-fe)软加速驱动效果调测
  20. 本题要求编写程序,输出整数152的个位数字、十位数字和百位数字的值。

热门文章

  1. 关于利用np.contour画出logistic模型决策边界(plot_decision_regions)的一点感想
  2. redis 通过aof日志恢复_Redis从入门到精通(四、Redis的持久化和数据备份与恢复)
  3. python实现邮件发送功能
  4. [码海拾贝 之JS] JS 之数组排序
  5. 收藏一些 JQuery 导航插件
  6. android 定时器 坑,Android 记录一个使用AlarmManager的坑。
  7. linux7清空都有a的文件,linux用户和组管理
  8. python timer模块_Python timeit模块的使用实践
  9. php curl exec ch,PHP curl_exec函数的用法实例详解
  10. android服务开启线程,android之service与intentService的不同