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

本文共 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

你可能感兴趣的文章
在sqlserver 中with(nolock)详解
查看>>
AI金融知识自学偏量化方向-目录0
查看>>
加载的问题
查看>>
添加个人专栏
查看>>
MYSQL的存储过程和函数简单写法
查看>>
acdream1197 Points In Cuboid
查看>>
topcoder srm 390 div1
查看>>
无法远程链接sqlserver的解决办法
查看>>
WinRT比.NET快了,还是Win8比Win7快
查看>>
SecureCRT 字体 颜色 修改 背景色 键盘映射 Home end delete
查看>>
【内核】Linux 2.6 内存反向映射机制 Reverse Mapping
查看>>
jQuery实现删除option控件下的元素
查看>>
Qt中translate、tr关系 与中文问题
查看>>
反射的两个过滤枚举
查看>>
Android编程之常识 - 混淆
查看>>
源码分析六(org.springframework.util包之Assert类)
查看>>
源码分析八(org.springframework.util包之StringUtils类))
查看>>
#include<> 和 #include""的区别
查看>>
【转】最近很火的 Safe Area 到底是什么
查看>>
java EE 环境配置(JDK + Tomcat + Eclipse for java EE)
查看>>