一直re,求大佬帮助

P1923 【深基9.例4】求第 k 小的数

LMC314191 @ 2024-10-05 15:58:37

#include<stdio.h>
int main(){
    int a[9999];
    int n,k,m,change;
    scanf("%d%d",&n,&k);
    for(int i=0;i<n;i++){
        scanf("%d",&m);
        a[i]=m;
    }
    for(int k=0;k<n;k++){
        for(int j=0;j<n-1;j++){
            if(a[j]>a[j+1]){
                change=a[j];
                a[j]=a[j+1];
                a[j+1]=change;
            }
        }
    }
    printf("%d",a[k]);
    return 0;   
}

by meifan666 @ 2024-10-05 16:03:01

@LMC314191 n<5000000,数组不够大


by Jerrycyx @ 2024-10-05 16:06:03

@LMC314191

  1. 你的定义范围只有 int a[9999],而题目中 1≤n<5000000,存不下,爆空间了
  2. 那么大的数组不应该在主函数内定义,会爆栈,应该定义成全局变量
  3. 你的冒泡排序是 O(N^2) 的,而 n 最大为 5000000,会超时
  4. scanf("%d",&m); a[i]=m; 其实可以直接写成 scanf("%d",&a[i]);
  5. 交换操作可以用 swap,不过不用也行

by Jerrycyx @ 2024-10-05 16:06:14

@LMC314191 求关


by LMC314191 @ 2024-10-05 16:17:45

@meifan666 @Jerrycyx 感谢大佬们


|