6.1 算法的目标

对数组按照升序/降序进行排序。
数组只有left最小标小于右小标才能进行排序排序。
每次从右往左/从左往右寻找时,l

6.2 算法的思想

首先确定一个基准数indexvalue,一般为数组元素的第一个数,设置一个左下标left=0,right=length-1;
从右开始往左寻找,如果找到比基准数小的,将其放到左边,令num[l]=num[r];
从左开始往右寻找,如果找到比基准数大的,将其放到右边,令num[r]=num[l];
当l=r时,将基准数indexvalue赋值给num[l]或者num[r];

6.3 算法的具体步骤

第一次排序完成:实现左边的数尽量小,右边的数尽量大。
6、快速排序 - 图1
step1:确定一个基准数,一般为数组最左边的数,indexvalue=65;
step2:从右开始往左寻找,如果找到比基准数小的,将其放到左边
num[r]=23 6、快速排序 - 图2
step3: 从左开始往右寻找,如果找到比基准数大的,将其放到右边,令num[r]=num[l];
找到nun[l]=95>indexvalue,令num[r]=num[l];
6、快速排序 - 图3
step4:循环操作 step2、step3,直至l和r重合,然后将基准数赋值给num[l]或num[r];

第二次排序:
对左边(left——l)的部分进行快速排序
对右边(l+1-right)的部分进行快速排序
……
……
直至左边和右边的都完成排序!

  1. /**
  2. * 快速排序
  3. * @param nums
  4. */
  5. public static void sort(int [] nums,int left,int right) {
  6. //确定一个基准数,一般为最左边的数
  7. if (left < right) {
  8. int indexvalue = nums[left];
  9. int l = left;
  10. int r = right;
  11. while (l < r) {
  12. while (l<r&&nums[r] >=indexvalue) {
  13. r--;
  14. }
  15. nums[l] = nums[r];
  16. while (l<r&&nums[l] <=indexvalue) {
  17. l++;
  18. }
  19. nums[r] = nums[l];
  20. }
  21. nums[r] = indexvalue;
  22. sort(nums, left, l);
  23. sort(nums, l+1, right);
  24. }
  25. }