Java实现快速排序

x33g5p2x  于2021-12-27 转载在 Java  
字(1.1k)|赞(0)|评价(0)|浏览(554)

快速排序简介

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

思路分析

以{5,3,7,6,8,2,9}为例,我们这里以中间数6为基数进行快速排序(下面红色数字表示基数)
初始数据 {5,3,7,6,8,2,9}
第1轮划分后的数据 {5,3,2}6 {8,7,9}
第2轮划分后的数据 {2} 3 {5}6 {8,7,9}
第3轮划分后的数据 {2} 3 {5}6 7 {8,9}
第3轮划分后的数据 {2} 3 {5}6 7 8 {9}
有序序列{2,3,5,6,7,8,9}

代码实现

  1. public class QuickSort {
  2. public static void main(String[] args) {
  3. int[] array = {5,3,7,6,8,2,9};
  4. quick(array,0,array.length-1);
  5. System.out.println(Arrays.toString(array));
  6. }
  7. public static void quick(int[] array,int left,int right){
  8. int l = left;
  9. int r = right;
  10. //基数
  11. int pivot = array[(left+right)/2];
  12. int temp;
  13. while(l<r){
  14. //找一个不大于基数的元素
  15. while(array[r]>pivot){
  16. r--;
  17. }
  18. //找一个不小于基数的元素
  19. while(array[l]<pivot){
  20. l++;
  21. }
  22. if(l == r){
  23. //当l==r时说明遍历完了所有的元素就退出循环
  24. break;
  25. }
  26. //如果l<r 找个了两个符合条件的元素
  27. //调换这两个元素的位置
  28. temp = array[r];
  29. array[r] = array[l];
  30. array[l] = temp;
  31. //如果l指向的元素刚好等于基数就让r向前移动一格
  32. if (array[l] == pivot){
  33. r--;
  34. }
  35. //如果r指向的元素刚好等于基数就让l向后移动一格
  36. if (array[r] == pivot){
  37. l++;
  38. }
  39. }
  40. //程序运行到这l和r的值是相等的
  41. if(left<r){
  42. //递归调用排序左边部分
  43. quick(array,left,r-1);
  44. }
  45. if (right>l){
  46. //递归调用排序右边部分
  47. quick(array,l+1,right);
  48. }
  49. }
  50. }

结果输出

  1. [2, 3, 5, 6, 7, 8, 9]
  2. Process finished with exit code 0

相关文章

最新文章

更多