1. public class QuickSort {
    2. public static void main(String[] args) {
    3. int[] arr = {10, -5, 45, 0, -7, 700, 1};
    4. quickSort(arr, 0, arr.length - 1);
    5. System.out.println(Arrays.toString(arr));
    6. // int []arr = new int[80000000];
    7. // for (int i = 0; i < 80000000; i++) {
    8. // arr[i] = (int) (Math.random() * 8000000);
    9. // }
    10. // long start= System.currentTimeMillis();
    11. // quickSort(arr,0,arr.length-1);
    12. // long end= System.currentTimeMillis();
    13. // System.out.println("time="+(end-start));
    14. }
    15. public static void quickSort(int[] arr, int left, int right) {
    16. int l = left;
    17. int r = right;
    18. int pivot = arr[(left + right) / 2];
    19. int temp = 0;
    20. while (l < r) {
    21. //在左边找,找到大于等于pivot的值
    22. while (arr[l] < pivot) {
    23. l += 1;
    24. }
    25. //在左边找,找到小于等于pivot的值
    26. while (arr[r] > pivot) {
    27. r -= 1;
    28. }
    29. //如果l>=r,说明pivot 的左右两边的值已经按照左边小于pivot,右边大于等pivot值
    30. if (l >= r) {
    31. break;
    32. }
    33. //交换
    34. temp = arr[l];
    35. arr[l] = arr[r];
    36. arr[r] = temp;
    37. //交换之后,arr[l]==pivot r--,
    38. if (arr[l] == pivot) {
    39. r -= 1;
    40. }
    41. //交换之后,arr[r]==pivot l++,
    42. if (arr[r]==pivot){
    43. l+=1;
    44. }
    45. }
    46. //l==r ,
    47. if (l == r) {
    48. l += 1;
    49. r -= 1;
    50. }
    51. //向左递归
    52. if (left < r) {
    53. quickSort(arr, left, r);
    54. }
    55. //向右递归
    56. if (right > l) {
    57. quickSort(arr, l, right);
    58. }
    59. }
    60. }