如何对顺序为 300000 的数组进行排序?

How to sort an array of order 300000?

我是竞争性编程的新手,我在 Codeforces 上遇到了 ICPC 挑战赛。第一个问题是 https://codeforces.com/contest/1376/problem/A1 这个,他们给的文件有 30000 个输入。他们基本上要求您按非递减顺序对整数列表进行排序。

我从实现冒泡排序代码开始,然后使用 freopen("sort.in","r",stdin) 提供输入文件 sort.in,然后使用 freopen("output.out","w",stdout) 函数创建输出文件。这对于像 50-100 这样的较少输入很好用,但是当我给出包含大约 30000 个输入的输入文件时,输出文件是空的。我不明白为什么会这样。

我有两个问题,

  1. 使用哪种排序算法?
  2. 为什么以下代码没有将排序后的数组输出到 output.out 文件?

link 到 sort.in 文件:https://assets.codeforces.com/files/6f8518a9aaa619e7/sort.zip

这是我的代码:

#include <bits/stdc++.h>

using namespace std;

int main(){
    freopen("sort.in", "r", stdin);
    freopen("output.out", "w", stdout);
    int n, c, temp, arr[500000];
    cin >> n;
    c=n;

    for(int i=0; i<n; i++){
        cin >> arr[i];
    }

    while(n!=0){
        for(int i=0; i<n-1; i++){
            if(n)
            if(arr[i]>arr[i+1]){
                temp = arr[i+1];
                arr[i+1] = arr[i];
                arr[i] = temp;
            }
        }
        n=n-1;
    }

    for(int i=0; i<c; i++){
        cout << arr[i] << " ";
    }

    return 0;
}

您可以手动实现归并排序算法。或者直接调用内置的C++排序函数。

#include <bits/stdc++.h>

using namespace std;

int main(){
    freopen("sort.in", "r", stdin);
    freopen("output.out", "w", stdout);
    int n, , arr[500000];

    cin >> n;

    for(int i=0; i<n; i++){
        cin >> arr[i];
    }

    sort( ar, ar + n ); 

    for(int i=0; i<n; i++){
        cout << arr[i] << " ";
    }

    return 0;
}