快速排序的核心思想是:
    根据基准数分组,分成两组,左边的都比基准数小,右边的都比基准数大;分组之后,对组内数据进行排序。
    举个例子:比如有下面一组数据,

    55 28 78 80 50 17 100 12

    1.选取基准数,以第一个数为基准数,即55为基准数,从前往后比较,得到以下数据:

    12 28 78 80 50 17 100 55

    这串数据是基准数55与右边最后一个数比较,55比12大,然后交换位置,
    2.然后基准数从后往前比较,得到以下数据:

    12 28 55 80 50 17 100 78
    1. 重复步骤1和步骤2,得到以下数据
    12 28 17 80 50 55 100 78
    12 28 17 55 50 80 100 78
    12 28 17 50 55 80 100 78

    直到基准数前面的数都比基准数小,基准数后面的数都比基准数大,然后以基准数分组,每组都重复上面的步骤。

    12 28 17 50 55 80 100 78

    以上以55前后分两组
    下面上代码

    1. public static void qSort(int data[], int left, int right) {
    2. // 从左边找的位置
    3. int ll = left;
    4. // 从右边找的位置
    5. int rr = right;
    6. // 取第一个作为基准数
    7. int base = data[left];
    8. //Sort
    9. // 1 2 3 4 5
    10. while (ll < rr) {
    11. // 从后面往前找到比基准数小的数进行对换
    12. while (ll < rr && data[rr] >= base) {
    13. rr--;
    14. }
    15. // 为了怕是 没找到
    16. if (ll < rr) {
    17. int temp = data[rr];
    18. data[rr] = data[ll];
    19. data[ll] = temp;
    20. ll++;
    21. }
    22. // 从前面往后面找比基准数大的进行对换
    23. while (ll < rr && data[ll] <= base) {
    24. ll++;
    25. }
    26. if (ll < rr) {
    27. int temp = data[rr];
    28. data[rr] = data[ll];
    29. data[ll] = temp;
    30. rr--;
    31. }
    32. }
    33. System.out.println("以Base=" +base+ "的排序结果");
    34. print(data);
    35. // 以基准数分为3部分,左边的比之小,右边比之大 我们要做的就是一把这左边和右边分别进行快速排序
    36. if (ll > left) {
    37. qSort(data, left, ll - 1);
    38. }
    39. if (rr < right) {
    40. qSort(data, ll+1, right);
    41. }
    42. }
    43. public static void print(int data[]) {
    44. for (int i = 0; i < data.length; i++) {
    45. System.out.print(data[i] + " ");
    46. }
    47. System.out.println();
    48. }
    49. public static void main(String[] args) {
    50. int data[] = { 55 ,28 ,78 ,80 ,50 ,17 ,100 ,12 };
    51. qSort(data, 0, data.length - 1);
    52. print(data);
    53. }