调用冒泡排序函数时实现升序排序

编写函数调用函数来实现变量值大小互换遇到问题,目前学到函数还未学指针,如何调用函数实现互换。

img

#include
void mpsort(int a[],int n)   //冒泡排序 
{
    int i,j,t;
    for(i=0;i1;i++)
    {
        for(j=0;j<(n-i);j++)
        {
            if(a[n+1][n])  //从小到大排序 
            {
                t=a[i+1];      
                a[i+1]=a[i];  //待修改 
                a[i]=t;
            }
            
        }
    }
}
void initArray(int a[],int n)//输入函数 
{
    int i;
    for(i=0;i"a[i]=");
       scanf("%d",&a[i]);
     }
}
void outputArray(int a[],int n)//输出数组 
{
        int i;
        for(i=0;i"%3d",a[i]);
        }
}
int main() 
{
    int array[100];
    int m;
    printf("请输入数组长度: "); 
    scanf("%d",&m);
    initArray(array,m);
    mpsort(array,m);
    outputArray(array,m);
    return 0;
}

该回答引用GPTᴼᴾᴱᴺᴬᴵ
如果您想在不使用指针的情况下,实现冒泡排序中的变量值大小互换,可以使用一个临时变量来完成。在您的代码中,临时变量已经定义为t,但是在比较和互换两个元素的时候,您需要注意数组下标的范围和变量的使用。

以下是修改过的mpsort函数,其中使用了临时变量t,并且在比较和互换两个元素的时候,使用正确的数组下标和变量:

void mpsort(int a[], int n)   //冒泡排序 
{
    int i, j, t;
    for (i = 0; i < n - 1; i++)
    {
        for (j = 0; j < n - i - 1; j++) //注意这里的循环范围
        {
            if (a[j + 1] < a[j])  //从小到大排序 
            {
                t = a[j + 1];
                a[j + 1] = a[j];
                a[j] = t;
            }
        }
    }
}


请注意,上述代码中if语句的判断条件为a[j+1]<a[j],而不是您之前的if(a[n+1]<a[n]),因为您在循环中使用的是i和j两个变量来遍历数组,而不是n和n+1。另外,在第二个for循环中,内层循环应该是j<n-i-1,而不是j<(n-i),因为冒泡排序每次都会将最大的元素沉到数组的最后面,因此在下一轮循环中,就可以忽略已经排好序的最后几个元素。


#include<stdio.h>
void mpsort(int a[],int n)   //冒泡排序 
{
    int i,j,t;
    for(i=0;i<n-1;i++)
    {
        for(j=0;j<(n-i);j++)
        {
            if(a[j+1] < a[j])  //从小到大排序 
            {
                t=a[i+1];      
                a[j+1]=a[j];  //待修改 
                a[i]=t;
            }
            
        }
    }
}
void initArray(int a[],int n)//输入函数 
{
    int i;
    for(i=0;i<n;i++)
     {
       printf("a[%d]=",i);
       scanf("%d",&a[i]);
     }
}
void outputArray(int a[],int n)//输出数组 
{
        int i;
        for(i = 0;i < n;i++)
        {
            printf("%3d",a[i]);
        }
}
int main() 
{
    int array[100];
    int m;
    printf("请输入数组长度: "); 
    scanf("%d",&m);
    initArray(array,m);
    mpsort(array,m);
    outputArray(array,m);
    return 0;
}
 

#include<stdio.h>
void mpsort(int a[],int n)   //冒泡排序 
{
    int i,j,t;
    for(i=0;i<n-1;i++)
    {
        for(j=0;j<n-i-1;j++)
        {
            if(a[j] > a[j+1])  
            {
                t=a[j+1];      
                a[j+1]=a[j];  
                a[j]=t;
            }
            
        }
    }
}
void initArray(int a[],int n)//输入函数 
{
    int i;
    for(i=0;i<n;i++)
     {
       printf("a[%d]=",i);
       scanf("%d",&a[i]);
     }
}
void outputArray(int a[],int n)//输出数组 
{
        int i;
        for(i=0;i<n;i++)
        {
            printf("%3d",a[i]);
        }
}
int main() 
{
    int array[100];
    int m;
    printf("请输入数组长度: "); 
    scanf("%d",&m);
    initArray(array,m);
    mpsort(array,m);
    outputArray(array,m);
    return 0;
}