问题出在哪了啊
题目描述给你N(N<=100)
个数,请你按照从小到大的顺序输出。
输入描述
输入数据第一行是一个正整数N
,第二行有N
个整数。
输出描述
输出一行,从小到大输出这N
个数,中间用空格隔开。
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long a={0};int n,i,j,t;
cin>>n;
for(i=0;i<n;i++)
{
cin>>a;
}
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(a>a)
{
t=a;a=a;a=t;
}
}
}
for(i=0;i<n;i++)
{
if(i!=n-1)cout<<a<<' ';else cout<<a;
}
}
平台结果是
Wrong answer on line 1
Yours:
-1738334741 -1587259165 -982535260 -730289080 1 1 2 2 2 2 2 ...(Too long to display)
Correct:
1 1 2 2 2 2 2 3 3 3 4 5 5 5 5 5 5 6 6 6 6 7 8 8 8 8 9 9 15 1...(Too long to display) 问题出在循环排序部分的代码上。这段代码使用了冒泡排序算法,但是在每一轮排序中,只比较相邻的两个数,而没有考虑到整个数组的有序性。这样的排序算法效率较低,当数据量较大时会耗费较长的时间。
为了解决这个问题,可以使用更高效的排序算法,例如快速排序或归并排序。这些算法可以在平均情况下以O(nlogn)的时间复杂度进行排序。
下面是使用快速排序算法对给定数组进行排序的示例代码:
#include <iostream>
using namespace std;
void quickSort(long long arr[], int left, int right) {
if (left >= right) {
return;
}
int pivot = arr;
int i = left, j = right;
while (i < j) {
while (i < j && arr >= pivot) {
j--;
}
arr[ i] = arr;
while (i < j && arr[ i] <= pivot) {
i++;
}
arr = arr[ i];
}
arr[ i] = pivot;
quickSort(arr, left, i - 1);
quickSort(arr, i + 1, right);
}
int main() {
long long a = {0};
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[ i];
}
quickSort(a, 0, n - 1);
for (int i = 0; i < n; i++) {
if (i != n - 1) {
cout << a[ i] << ' ';
} else {
cout << a[ i];
}
}
return 0;
}
这段代码使用了快速排序算法来对给定数组进行排序。首先选择一个基准值(这里选择了数组的第一个元素),然后将数组分成两部分,一部分是小于基准值的元素,另一部分是大于基准值的元素。然后递归地对两部分进行排序,最终得到整个数组有序。排序过程中,使用了双指针的方法来进行元素的交换。
这样修改后的代码可以正确地对数组进行排序,并输出从小到大的顺序。
页:
[1]