关闭
qq_47847036 2022-05-18 22:26 采纳率: 71.4%
浏览 874
已结题

函数实现对二维数组每一行冒泡法排序

函数实现对二维数组每一行冒泡法排序
分数 14
作者 王跃萍
单位 东北石油大学
编写函数实现对二维数组每一行用冒泡法升序排序。

函数接口定义:
void sort(int a[],int n);
其中a和n 是用户传入的参数。函数对a数组中的n个元素升序排序。

裁判测试程序样例:
#include <stdio.h>
void sort(int a[],int n);
int main()
{
int a[3][4],i,j;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
for(i=0;i<3;i++) sort(a[i],4);
for(i=0;i<3;i++)
{ for(j=0;j<4;j++) printf("%5d",a[i][j]);
printf("\n");
}

return 0;
}

/* 请在这里填写答案 */
输入样例:
5 1 2 6
5 2 1 4
3 1 2 4
输出样例:
1 2 5 6
1 2 4 5
1 2 3 4

展开全部

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-05-19 00:36
    关注

    供参考:

    #include <stdio.h>
    void sort(int a[], int n);
    int main()
    {
        int a[3][4], i, j;
        for (i = 0; i < 3; i++)
            for (j = 0; j < 4; j++)
                scanf("%d", &a[i][j]);
        for (i = 0; i < 3; i++) 
            sort(a[i], 4);
        for (i = 0; i < 3; i++)
        {
            for (j = 0; j < 4; j++) 
                printf("%5d", a[i][j]);
            printf("\n");
        }
        return 0;
    }
    void sort(int a[], int n)
    {
        int i, j, t;
        for (i = 0; i < n - 1; i++) {
            for (j = 0; j < n - 1 - i; j++) {
                if (a[j] > a[j + 1]) {
                    t = a[j]; a[j] = a[j + 1]; a[j + 1] = t;
                }
            }
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    不甘_ 2022-05-19 02:27

    老哥帮忙分析下为什么我这个第二维数组只出现两个数据

    int main(){
        int arr1[]={1,2,3,4,5,6};
        int arr2[3][6]={{66,5,4,1,2,3},{66,5,4,1,2,3},{66,5,4,1,2,3}};
        printf("%d \n",sizeof(arr2)/sizeof(arr2[0]));    //打印数组长度 
        for(int i=0;i<sizeof(arr2)/sizeof(arr2[0]);i++){
            arr(arr2[i],4);
        }
    
    } 
    void arr(int arr2[],int n){
        printf("%d \n",sizeof(arr2)/sizeof(arr2[0]));  
        for(int i=0;i<sizeof(arr2)/sizeof(arr2[0]);i++){
            printf("%d,",arr2[i]);//打印数组 
        }
            
        printf("\n");
            for(int i=0;i<sizeof(arr2)/sizeof(arr2[0]);i++){
    //        每轮寻找出当前最大值,最大值放到第i位,找出i和i后面的最大的值。     6654333
            for(int j=i;j<sizeof(arr2)/sizeof(arr2[0]);j++){
                if(arr2[i]<arr2[j]){
                    int temp=arr2[i];
                    arr2[i]=arr2[j];
                    arr2[j]=arr2[i];
                }
            }
        }
        for(int i=0;i<sizeof(arr2)/sizeof(arr2[0]);i++){
            printf("%d,",arr2[i]);//打印数组 
        }
    }
    
    

    img

    回复
    qzjhjxj 回复 不甘_ 2022-05-19 02:45

    void arr(int arr2[],int n) 函数里,形参 arr2[] 数组的长度不能用: sizeof(arr2)/sizeof(arr2[0])得到,因为数组名作为参数传递给函数时,退化为指针,需要数组大小时,需另一个参数传数组大小。

    1
    回复
    不甘_ 回复 qzjhjxj 2022-05-19 03:00

    谢谢

    回复
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 5月26日
  • 已采纳回答 5月19日
  • 创建了问题 5月18日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部