ITPub博客

首页 > 应用开发 > Java > 好程序员Java教程教你5分钟了解快速排序

好程序员Java教程教你5分钟了解快速排序

原创 Java 作者:好程序员IT 时间:2019-06-21 14:40:37 0 删除 编辑

好程序员 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. public   class  QuickSort {  
  3. public   static   void  quickSort( int [] arr, int  low, int  high){  
  4. int  i,j,temp,t;  
  5. if (low>high){  
  6. return ;  
  7. }  
  8. i=low;  
  9. j=high;  
  10. //temp存储基准数  
  11. temp = arr[low];  
  12. while  (i<j) {  
  13. //先从右边开发判断,条件成立,high向左递减  
  14. while  (temp<=arr[j]&&i<j) {  
  15. j--;  
  16. }  
  17. arr[i]=arr[j];  
  18. //再从左边开始,low依次向右递增  
  19. while  (temp>=arr[i]&&i<j) {  
  20. i++;  
  21. }  
  22. arr[j]=arr[i];  
  23. arr[i]=temp;  
  24. }  
  25. //递归调用左边内容进行排序  
  26. quickSort(arr, low, j-1);  
  27. //递归调用右边内容进行排序  
  28. quickSort(arr, j+1, high);  
  29. }  
  30. public   static   void  main(String[] args){  
  31. int [] arr = {15,23,7,87,34,56};  
  32. quickSort(arr, 0, arr.length-1);  
  33. for  ( int  i = 0; i < arr.length; i++) {  
  34. System.out.println(arr[i]);  
  35. }  
  36. }  
  37. }  

  总结

以上介绍的是普通快速排序,针对快速排序,还有一些改进算法,可以进一步提高执行效率。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69913892/viewspace-2648334/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
欢迎关注公众号:好程序员特训营 web前端教程分享 723729549 大数据教程分享 703503210

注册时间:2019-03-20

  • 博文量
    539
  • 访问量
    410863