开发者社区> 技术小哥哥> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

关于快速排序的Java代码实现

简介:
+关注继续查看

快速排序(Quicksort)是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

实现方式一:

复制代码
 1 package test1;
 2 
 3 public class QuicSort {
 4     /*
 5      * 使用快速排序
 6      * arras:要排序的数组
 7      * low:数组的开始下标
 8      * hight:数组的末尾下标
 9      */
10     public void sort(int[] arras,int low,int hight){
11         int i = low;
12         int j = hight;
13         if(i>j){
14             return ;
15         }
16         //基准元素
17         int key = arras[low];
18         while(true){//让一趟里面的全部元素都比较完毕
19             //j往前走
20             while(j>i){
21                 if(arras[j] < key){
22                     //交换
23                     int temp = arras[j];
24                     arras[j] = arras[i];
25                     arras[i] = temp;
26                     break;
27                 }else{
28                     j--;
29                 }
30             }
31             //i往后走
32             while(j>i){
33                 if(arras[i] > key){
34                     //交换
35                     int temp = arras[j];
36                     arras[j] = arras[i];
37                     arras[i] = temp;
38                     break;
39                 }else{
40                     i++;
41                 }
42             }
43             if(i ==j){
44                 break;
45             }
46         }
47         //基准左边的数组排序
48         sort(arras,low,i-1);
49         //基准右边的数组排序
50         sort(arras,i+1,hight);
51     }
52     /*
53      * 打印数组里面的元素
54      */
55     public void print(int[] arras){
56         for(int i=0 ; i<arras.length;i++){
57             if(i==arras.length-1){
58                 System.out.println(arras[i]);
59             }else{
60                 System.out.print(arras[i]+",");
61             }
62         }
63     }
64     public static void main(String[] args) {
65         int[] as = {49,38,65,97,76,13,27};
66         QuicSort qs = new QuicSort();
67         qs.sort(as,0,as.length-1);
68         qs.print(as);
69     }
70 }
复制代码

实现方式二:

复制代码
 1 package test1;
 2 
 3 public class QuickSort1 {
 4     int a[] = { 49, 38, 65, 97, 76, 13, 27, 49, 78, 34, 12, 64, 5, 4, 62, 99,
 5             98, 54, 56, 17, 18, 23, 34, 15, 35, 25, 53, 51 };
 6     public QuickSort1() {
 7         quick(a);
 8         for (int i = 0; i < a.length; i++)
 9             System.out.println(a[i]);
10     }
11     public int getMiddle(int[] list, int low, int high) {
12         int tmp = list[low]; // 数组的第一个作为中轴
13         while (low < high) {
14             while (low < high && list[high] >= tmp) {
15                 high--;
16             }
17             list[low] = list[high]; // 比中轴小的记录移到低端
18             while (low < high && list[low] <= tmp) {
19                 low++;
20             }
21             list[high] = list[low]; // 比中轴大的记录移到高端
22         }
23         list[low] = tmp; // 中轴记录到尾
24         return low; // 返回中轴的位置
25     }
26     public void _quickSort(int[] list, int low, int high) {
27         if (low < high) {
28             int middle = getMiddle(list, low, high); // 将list数组进行一分为二
29             _quickSort(list, low, middle - 1); // 对低字表进行递归排序
30             _quickSort(list, middle + 1, high); // 对高字表进行递归排序
31         }
32     }
33     public void quick(int[] a2) {
34         if (a2.length > 0) { // 查看数组是否为空
35             _quickSort(a2, 0, a2.length - 1);
36         }
37     }
38 }
复制代码

 


本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/4082659.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
八旬老人废寝忘食,只为学会Java快速排序,今天他终于学会了
在常见的排序算法中,快速排序在性能上有绝对的优势,家里有条件的建议都把原理搞懂;
14613 0
线程 - Java 多线程编程(下)
线程 - Java 多线程编程(下)
25 0
线程 - Java 多线程编程(上)
线程 - Java 多线程编程(上)
59 0
Java多线程那些事,对Java并发编程2w余字的总结,超详细(从入门到完全掌握)
Java多线程那些事,对Java并发编程2w余字的总结,超详细(从入门到完全掌握)
77 0
java多线程中的死锁、活锁、饥饿、无锁都是什么鬼?
死锁、活锁、饥饿是关于多线程是否活跃出现的运行阻塞障碍问题,如果线程出现了这三种情况,即线程不再活跃,不能再正常地执行下去了。
65 0
五分钟带你玩转多线程(一)java多线程基础知识简介
线程概念 进程:是一个执行中的程序,如打开网易云音乐,网易云音乐就是一个进程 线程:是进程的组成,一个进程包含多个线程,是jvm最小调度单元。如网易云音乐听歌是一个线程,评价是一个线程。
48 0
Java的并发编程中的多线程问题到底是怎么回事儿?
原创: Hollis 在我之前的一篇《再有人问你Java内存模型是什么,就把这篇文章发给他。》文章中,介绍了Java内存模型,通过这篇文章,大家应该都知道了Java内存模型的概念以及作用,这篇文章中谈到,在Java并发编程中,通常会遇到三个问题,即原子性问题、一致性问题和有序性问题。
1056 0
Java多线程
Windows等操作系统均支持多线程进程的并发处理机制。操作系统支持多线程,使多个程序能够并发执行,以改善资源使用率和提高系统效率;操作系统支持多线程,能够减少程序并发时所付出的时间和空间开销,使得开发粒度更细,并发性更好。 进程 进程是一个程序关于某个数据集合的一次执行过程,是操作系统进行资源分配和保护的基本单位。进程具有以下特性: ①结构性。进程包含了数据集合和
1350 0
2010
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载