感觉没有错呀,用的快速排序,采用的分治法,为什么只有40分 下面是我的代码
#include <iostream>
using namespace std;
int a[100000]; // 定义全局数组用于存储输入的数字
int n; // 定义全局变量用于存储数组的大小
// 划分函数,返回基准元素的位置
int partition(int a[], int start, int end) {
int i = start, j = end;
int temp = a[i]; // 选择第一个元素作为基准
while (i < j) {
// 从右向左找第一个小于基准的元素
while (j > i && a[j] >= temp) j--;
a[i] = a[j]; // 将大于基准的元素移动到左边
// 从左向右找第一个大于基准的元素
while (i < j && a[i] <= temp) i++;
a[j] = a[i]; // 将小于或等于基准的元素移动到右边
}
a[i] = temp; // 将基准元素放到正确的位置上
return i;
}
// 快速排序函数
void quicksort(int a[], int start, int end) {
if (start < end) { // 如果子数组长度大于1,则继续排序
int post = partition(a, start, end);
quicksort(a, start, post - 1); // 递归排序左半部分
quicksort(a, post + 1, end); // 递归排序右半部分
}
}
int main() {
cin >> n; // 输入数组的大小
for (int i = 0; i < n; i++) {
cin >> a[i]; // 输入数组的元素
}
quicksort(a, 0, n - 1); // 调用快速排序函数对数组进行排序
for (int i = 0; i < n; i++) {
cout << a[i] << ' '; // 输出排序后的数组
}
cout << endl; // 输出换行符
return 0;
}