请问各位c语言求一组数据中最大的两个数和最小的两个数,我错在哪,该怎么修改呢


#include <stdio.h>
#include<stdlib.h>
int mp_sort(int c[],int n);
int main()
{
    int num,i;
    scanf("%d",&num);
    int a[num],b[num];
    for(i=0;i<num;i++)
        scanf("%d",&a[i]);
    
    /**********  Begin  **********/
    b[]=mp_sort(a[],num);
    printf("max1=%d max2=%d\n",b[num-1],b[num-2]);
    printf("min1=%d min2=%d",b[0],b[1]);
return 0;
}
int mp_sort(int c[],int n)
{
    int i=0,j=1,item;
    while(1)
    {
        if(j<n)
        {
            if(c[i]>c[j])
            {
                item=c[i];
                c[i]=c[j];
                c[j]=item;
            }
            i++;j++;
        }
        else
        {
            break;
        }
    }
    return c[];
}
    /**********  End  **********/


![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/516968272836137.png "#left")

问题挺多的,一个是传参应该传指针直接对a进行排序,用b反而麻烦
排序算法也有问题,随便改了改


#include <stdio.h>
#include <stdlib.h>
void mp_sort(int *p, int n);
int main()
{
    int num, i;
    scanf("%d", &num);
    int a[num];
    for (i = 0; i < num; i++)
        scanf("%d", &a[i]);
    /**********  Begin  **********/
    mp_sort(a, num);
    printf("max1=%d max2=%d\n", a[num - 1], a[num - 2]);
    printf("min1=%d min2=%d", a[0], a[1]);
    return 0;
}
void mp_sort(int *p, int n)
{
    int i, j, item;
    for(i = 0;i < n;i++){
        for(j = i;j < n;j++){
            if(p[i] > p[j]){
                item = p[i];
                p[i] = p[j];
                p[j] = item;
            }
        }
    }
}


只用一个数组就行
#include <stdio.h>
#include<stdlib.h>
int mp_sort(int c[],int n);
int main()
{
int j=0;
int num,i;
scanf("%d",&num);
int a[num];
for(i=0; i<num; i++)
{
scanf("%d",&a[i]);
}
mpsort(a,num);
printf("max1=%d max2=%d\n",a[num-1],a[num-2]);
printf("min1=%d min2=%d",a[0],a[1]);
return 0;
}
void mpsort(int c[],int n)
{
int i=0,item;
while(i<n-1)
{
int j=0;
while(j<n-1)
{
if(c[j]>c[j+1])
{
item=c[j];
c[j]=c[j+1];
c[j+1]=item;
}
j++;
}
i++;

}

}

img


这是调试,调试不出。