快速排序

原理

  • 将数组通过left,mid,right分为左右两部分
  • 递归将左右两部分再通过基准分为左右两部分
  • 直至分为每个只有一个元素的数组
  • 将数组两两进行合并

    代码实现

    ```javascript import java.util.Arrays;

/**

  • @author laoduan
  • @create 2020-05-08-20:29 */ public class QuickSort { public static void main(String[] args) {
  1. int [] arr = {-9,78,0,23,-567,70};
  2. quickSort(arr,0,arr.length-1);
  3. System.out.println("arr = "+ Arrays.toString(arr));
  4. }
  5. public static void quickSort(int[] arr,int left,int right){
  6. int l = left;
  7. int r = right;
  8. int pivot = arr[(left+right)/2];
  9. int temp = 0;//临时变量,交换时使用
  10. while (l<r){
  11. //在privot的左边找,找到一个大于等于pivot的值才退出
  12. while (arr[l]<pivot){
  13. l+=1;
  14. }
  15. //在privot的右边找,找到一个小于等于pivot的值才退出
  16. while (arr[r]>pivot){
  17. r-=1;
  18. }
  19. //如果l>=r,说明pivot的左右两边的值已经按照左边全部小于等于pivot
  20. //右边大于pivot
  21. if (l>=r){
  22. break;
  23. }
  24. temp = arr[l];
  25. arr[l]=arr[r];
  26. arr[r]=temp;
  27. //如果叫唤完发现arr[l] == pivot,则--,前移
  28. if(arr[l]== pivot){
  29. r-=1;
  30. }
  31. if(arr[r]== pivot){
  32. l+=1;
  33. }
  34. }
  35. //如果l==r,必须让l++,r--,否则栈溢出
  36. if(l==r){
  37. l+=1;
  38. r-=1;
  39. }
  40. //向左递归
  41. if(left<r){
  42. quickSort(arr,left,r);
  43. }
  44. //向右递归
  45. if(right>l){
  46. quickSort(arr,l,right);
  47. }
  48. }

}

```