网站首页 > java教程 正文
好程序员Java教程教你5分钟了解快速排序,前言:
快速排序是面试中经常会问到的一种排序算法,对比其他一些排序算法,快速排序的平均时间相对较少。
快速排序思想介绍
快速排序使用了分治的思想,通过一轮的排序,可以将序列分割成独立的两个部分,其中一部分的值均比基准值小,另一部分的值均比基准值大。而后针对两部分序列再分别按照同样的算法进行排序,直到序列整体有序。
以如下序列arr为例进行升序排序,说明快速排序的基本算法
第一个位置的值23作为基准值base,从右边开始比较,如果arr[high]>base,high前移。
arr[high]<base,arr[low]=arr[high],然后low后移
Arr[low]<base,不交换,low后移
Arr[low]>base,arr[high]=arr[low],high前移
Arr[high]<base,arr[low]=base,low后移,
low和high指向同一个位置,
将基准数据赋值给low和high指向的同一位置,本轮比较结束。然后,再对23前的数据和23后面的数据,分别再按照上述算法进行比较排序,依次类推,直到所有元素有序。
快速排序的代码实现
由于对各个子序列都要进行相同算法的排序,可以采用递归思想实现快速排序
1. package com.qfedu.vo;
2.
3. public class QuickSort {
4. public static void quickSort(int[] arr,int low,int high){
5. int i,j,temp,t;
6. if(low>high){
7. return;
8. }
9. i=low;
10. j=high;
11. //temp存储基准数
12. temp = arr[low];
13.
14. while (i<j) {
15. //先从右边开发判断,条件成立,high向左递减
16. while (temp<=arr[j]&&i<j) {
17. j--;
18. }
19. arr[i]=arr[j];
20. //再从左边开始,low依次向右递增
21. while (temp>=arr[i]&&i<j) {
22. i++;
23. }
24. arr[j]=arr[i];
25. arr[i]=temp;
26.
27. }
28. //递归调用左边内容进行排序
29. quickSort(arr, low, j-1);
30. //递归调用右边内容进行排序
31. quickSort(arr, j+1, high);
32. }
33.
34.
35. public static void main(String[] args){
36. int[] arr = {15,23,7,87,34,56};
37. quickSort(arr, 0, arr.length-1);
38. for (int i = 0; i < arr.length; i++) {
39. System.out.println(arr[i]);
40. }
41. }
42. }
总结
以上介绍的是普通快速排序,针对快速排序,还有一些改进算法,可以进一步提高执行效率。
更多精彩内容欢迎关注公众号:好程序员特训营
猜你喜欢
- 2024-10-09 一遍记住 8 种排序算法与 Java 代码实现
- 2024-10-09 java程序员必知的八大排序(java编程排序算法实现)
- 2024-10-09 Java实现堆排序(java堆排序算法代码)
- 2024-10-09 插入排序算法,就这么简单,还学不会算我输
- 2024-10-09 程序员必知的十大基础实用算法之-快速排序算法
- 2024-10-09 【数据结构与算法】十大经典排序算法-快速排序
- 2024-10-09 经常用到的的排序(快速排序和归并排序)简单的计算机算法学习
- 2024-10-09 排序算法——快排(快速排序算法实例讲解)
- 2024-10-09 七种基于比较的排序,基于Java实现,收藏一下?
- 2024-10-09 十大经典排序算法动画与解析,看我就够了!(配代码完全版)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)