快速排序算法求解逆序对问题:
·
#include<cstdio>
const int N = 10010;
int data[N];
#define swap(a,b){int temp=a;a=b;b=temp;}
int partition(int left, int right) {
int i = left;
int temp = data[right];
for (int j = left; j < right; j++)
if (data[j] < temp) {
swap(data[j], data[i]);
i++;
}
swap(data[i], data[right]);
return i;
}
void quicksort(int left, int right) {
if (left < right) {
int i = partition(left, right);
quicksort(left, i - 1);
quicksort(i + 1, right);
}
}
int main() {
int n;
scanf_s("%d", &n);
for (int i = 1; i <= n; i++) scanf_s("%d", &data[i]);
quicksort(1, n);
printf("% d\n", data[(n + 1) / 2]);
return 0;
}
更多推荐


所有评论(0)