3
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 100000;
void sort(int* a, int lo, int hi)
{
int i = lo;
if (lo >= hi)
return;
for (int j = hi, mode = 1; i < j; mode > 0 ? j-- : i++)
if (a[i] > a[j])
{
swap(a[i], a[j]);
mode = -mode;
}
sort(a, lo, i - 1);
sort(a, i + 1, hi);
}
bool check(int* a)
{
for (int i = 1; i < N; i++)
if (a[i] < a[i - 1])
return false;
return true;
}
int main()
{
int a[N];
for (int i = 0; i < N; i++)
a[i] = (i * 17 + 107) % 10;
sort(a, 0, N - 1);
cout << (check(a) ? "correct" : "incorrect") << endl;
return 0;
}
我發現這個排序算法而是試圖瞭解它,我不能長時間。它看起來非常簡單和簡短。我認爲,它可以通過不變的被證明的a[lo:i]
任何元素小於a[j:hi]
任何元素,但我不能證明這種說法也是如此循環的每次迭代後(j--
或i++
)。簡單的遞歸排序算法,瞭解哪些硬
棘手的分區程序解釋 – eXXXXXXXXXXX2
是它的實現是非常混亂。 –