两种快排的写法

昨天做了一道快排的题发现了快排在每次排序的时候选取的变量不同对某些相同的数据来说排出来的稳定性也不同(然后WA掉了23333)顺便推销一下学长关于十大排序的博文,写的很好,还配有动图(点这里进去)
题目链接https://vjudge.net/problem/Aizu-ALDS1_6_C
首先是根据题目伪代码写的快排

void quickSort(pair<char, int> arr[], int low, int high) {
    if (low >= high)
        return;
    int kase = low;
    for (int i = low; i<high; i++) 
        if (arr[i].second <= arr[high].second)
            swap(arr[kase++], arr[i]);
    swap(arr[kase], arr[high]);
    quickSort(arr, low, kase-1);
    quickSort(arr, kase+1, high);
}

另外一个是学长博客里的快排

void quickSort(pair<char, int> arr[], int n) {
    if (n <= 0)
        return;
    int low = 1, high = n;
    while(low <= high) {
        if (arr[low].second < arr[0].second)
            low++;
        else
            swap(arr[low], arr[high--]);
    }
    swap(arr[0], arr[high]);
    quickSort(arr, low-1);
    quickSort(arr+low, n - low);
}

你可能感兴趣的:(两种快排的写法)