am-kernels/cpu-tests/tests/quick-sort.c
2020-08-11 17:38:42 +00:00

49 lines
741 B
C

#include "trap.h"
#define N 20
int a[N] = {2, 12, 14, 6, 13, 15, 16, 10, 0, 18, 11, 19, 9, 1, 7, 5, 4, 3, 8, 17};
int partition(int *a, int p, int q) {
int pivot = a[p];
int i = p, j = q;
while(i < j) {
while(i < j && a[j] > pivot) j --;
a[i] = a[j];
while(i < j && a[i] <= pivot) i ++;
a[j] = a[i];
}
a[i] = pivot;
return i;
}
void quick_sort(int *a, int p, int q) {
if(p >= q) return;
int m = partition(a, p, q);
quick_sort(a, p, m - 1);
quick_sort(a, m + 1, q);
}
int main() {
quick_sort(a, 0, N - 1);
int i;
for(i = 0; i < N; i ++) {
nemu_assert(a[i] == i);
}
nemu_assert(i == N);
quick_sort(a, 0, N - 1);
for(i = 0; i < N; i ++) {
nemu_assert(a[i] == i);
}
nemu_assert(i == N);
return 0;
}