本章讲解的是快速排序算法,快速排序有很多变种,不过基本原理是一样的。


int Partition(int *a, int low, int high)
{
    int key = a[low];
                   
    while (low < high) {
                       
        while (low < high && a[high] >= key) {
            high--;
        }
        a[low] = a[high];
                       
        while (low < high && a[low] <= key) {
            low++;
        }
        a[high] = a[low];
                       
    }
                   
    a[low] = key;
    return low;
                   
}
void QuickSort(int *a, int low, int high)
{
    if (low < high) {
        int mid = Partition(a, low, high);
        QuickSort(a, low, mid-1);
        QuickSort(a, mid+1, high);
    }
}
int main(int argc, const char * argv[])
{
    int a[] = {3, 5, 1, 2, 5, 4};
    int n = sizeof(a) / sizeof(*a);
    int low = 0;
    int high = n - 1;
                   
    QuickSort(a, low, high);
                   
    int i = 0;
    for (; i < n; i++) {
        printf("%d ", a[i]);
    }
                   
    return 0;
}


输出:1 2 3 4 5 5