P1177快速排序采用的分治法为什么只有40分
查看原帖
P1177快速排序采用的分治法为什么只有40分
1376308
Calmingjucie楼主2024/10/8 16:17

感觉没有错呀,用的快速排序,采用的分治法,为什么只有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;
}
2024/10/8 16:17
加载中...