1.png
    2.png
    3.png
    4.png
    5.png

    代码

    1. package test;
    2. import java.util.Random;
    3. public class QuickSort {
    4. public static void main(String[] args) {
    5. //定义一个数组
    6. int[] arr = new int[100000];
    7. Random random = new Random();
    8. //给数组元素赋值
    9. for (int i = 0; i < arr.length; i++) {
    10. //生成随机数
    11. arr[i] = random.nextInt();//如果不传递参数,随机数的范围是int范围
    12. }
    13. //排序之前记录时间
    14. long start = System.currentTimeMillis();//获取当前操作系统的时间,以毫秒值表示的
    15. //排序
    16. quickSort(arr, 0, arr.length - 1);
    17. //排序之后记录时间
    18. long end = System.currentTimeMillis();
    19. System.out.println(end - start);
    20. }
    21. public static void quickSort(int[] arr, int left, int right) {//left表示从左边哪个开始排,right表示排到哪个位置,left表示左边的索引位置,right表示右边的索引位置,left不能比right大
    22. //进行判断,如果左边索引比右边索引大,是不合法的,直接使用return结束这个方法
    23. if(left > right) {
    24. return;
    25. }
    26. //定义变量保存基准数
    27. int base = arr[left];
    28. //定义变量i,指向最左边
    29. int i = left;
    30. //定义变量j,指向最右边
    31. int j = right;
    32. //当i和j不相遇的时候,在循环中进行检索
    33. while( i != j) {
    34. //由j从右往左检索比基准数小的,如果检索到比基准数小的就停下
    35. //如果检索到比基准数大的或相等的,就继续检索
    36. while(arr[j] >= base && i < j) {
    37. j--; //j从右往左移动
    38. }
    39. //i从左往右检索
    40. while(arr[i] <= base && i < j) {
    41. i++; //i从左往右移动
    42. }
    43. //代码走到这,i停下了,j也停下了,然后交换i和j位置的元素
    44. int temp = arr[i];
    45. arr[i] = arr[j];
    46. arr[j] = temp;
    47. }
    48. //如果上面while循环的条件不成立,会跳出这个循环,往下执行。
    49. //如果这个条件不成立,说明i和j相遇了
    50. //如果i和j相遇了,就交换基准数这个元素和相遇位置的元素。
    51. //把相遇位置的元素赋值给给基准数这个位置的元素
    52. arr[left] = arr[i];
    53. //把基准数赋值给相遇位置的元素
    54. arr[i] = base;
    55. //基准数在这里就归位了,左边的数字都比他小,右边的数字都比他大
    56. //排基准数的左边
    57. quickSort(arr, left, i - 1);
    58. //排基准数的右边
    59. quickSort(arr, j + 1, right);
    60. }
    61. }