我的笔记本

主要记录技术,其他杂七杂八也偶尔发,看心情

快速排序

  1. 从数列中挑出一个元素,称为 “基准”(pivot);

  2. 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;

  3. 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序;

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Paritition1(int A[], int low, int high) {
    int pivot = A[low];
    while (low < high) {
    while (low < high && A[high] >= pivot) {
    --high;
    }
    A[low] = A[high];
    while (low < high && A[low] <= pivot) {
    ++low;
    }
    A[high] = A[low];
    }
    A[low] = pivot;
    return low;
    }

    void QuickSort(int A[], int low, int high) //快排母函数
    {
    if (low < high) {
    int pivot = Paritition1(A, low, high);
    QuickSort(A, low, pivot - 1);
    QuickSort(A, pivot + 1, high);
    }
    }
zuoyizou