鱼C论坛

 找回密码
 立即注册
查看: 1446|回复: 22

[已解决]二维数组使用冒泡排序

[复制链接]
发表于 2020-5-17 10:23:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
老哥们,我想使用for循环冒泡排序排序二维数组中的元素,但是我这么写运行结果元素丢失了。请教缺了什么,或者二维数组不能使用冒泡排序
最佳答案
2020-5-17 11:04:14
本帖最后由 sunrise085 于 2020-5-17 11:08 编辑


不知道你是打算怎么排序、是整个二维数组排序,还是每一行单独排序?
冒泡排序需要两层循环
你的是二维数组冒泡排序,若每行单独排序需要三层循环。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
    int a[3][4] = { {16,11,12,2},{9,8,7,6},{4,3,15,1}};
    int h = 0;
    for (int i = 0; i < 3; i++)
        for (int j = 0; j < 4; j++) 
            for (int k=0;k<4-j;k++){
                if ( a[i][k]> a[i][k + 1]) {
                    h =a[i][k];
                    a[i][k] = a[i][k + 1];
                    a[i][k + 1] = h;
                }
            }
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            printf("a[%d][%d]=%-3d\n", i, j, a[i][j]);
        }
        printf("\n");
    }
    system("pause");
    return 0;
}

若是对着呢个数组进行排序,只需两层循环
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
    int a[3][4] = { {16,11,12,2},{9,8,7,6},{4,3,15,1}};
    int h = 0;
    for (int i = 0; i < 3*4; i++)
        for (int j=0;j<12-i;j++){
            if ( a[j/4][j%4]> a[j/4][j%4 + 1]) {
                h =a[j/4][j%4];
                a[j/4][j%4] = a[j/4][j%4 + 1];
                a[j/4][j%4 + 1] = h;
            }
        }
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            printf("a[%d][%d]=%-3d\n", i, j, a[i][j]);
        }
        printf("\n");
    }
    system("pause");
    return 0;
}
C.png

评分

参与人数 2荣誉 -1 鱼币 -4 收起 理由
MIke_python小小 -1 -1 恶意评选最佳!!
sunrise085 -3 恶意评选最佳!!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-17 11:04:14 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +1 鱼币

本帖最后由 sunrise085 于 2020-5-17 11:08 编辑


不知道你是打算怎么排序、是整个二维数组排序,还是每一行单独排序?
冒泡排序需要两层循环
你的是二维数组冒泡排序,若每行单独排序需要三层循环。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
    int a[3][4] = { {16,11,12,2},{9,8,7,6},{4,3,15,1}};
    int h = 0;
    for (int i = 0; i < 3; i++)
        for (int j = 0; j < 4; j++) 
            for (int k=0;k<4-j;k++){
                if ( a[i][k]> a[i][k + 1]) {
                    h =a[i][k];
                    a[i][k] = a[i][k + 1];
                    a[i][k + 1] = h;
                }
            }
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            printf("a[%d][%d]=%-3d\n", i, j, a[i][j]);
        }
        printf("\n");
    }
    system("pause");
    return 0;
}

若是对着呢个数组进行排序,只需两层循环
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
    int a[3][4] = { {16,11,12,2},{9,8,7,6},{4,3,15,1}};
    int h = 0;
    for (int i = 0; i < 3*4; i++)
        for (int j=0;j<12-i;j++){
            if ( a[j/4][j%4]> a[j/4][j%4 + 1]) {
                h =a[j/4][j%4];
                a[j/4][j%4] = a[j/4][j%4 + 1];
                a[j/4][j%4 + 1] = h;
            }
        }
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            printf("a[%d][%d]=%-3d\n", i, j, a[i][j]);
        }
        printf("\n");
    }
    system("pause");
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-17 10:24:05 | 显示全部楼层

回帖奖励 +1 鱼币

应该是数组下标弄错了
把文字代码发出来,测一下(可以复制粘贴的那种)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-17 10:26:54 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-17 10:28:49 | 显示全部楼层
liuzhengyuan 发表于 2020-5-17 10:24
应该是数组下标弄错了
把文字代码发出来,测一下(可以复制粘贴的那种)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
        int a[3][4] = { {16,11,12,2},{9,8,7,6},{4,3,15,1}};
        int h = 0;
        int j;
        for (int i = 0; i < 3; i++) {
                for ( j = 0; j < 4; j++) {
                        if ( a[i][j]> a[i][j + 1]) {
                                h =a[i][j];
                                a[i][j] = a[i][j + 1];
                                a[i][j + 1] = h;
                        }
                }
        }
        for (int i = 0; i < 3; i++) {
                for (j = 0; j < 4; j++) {
                        printf("a[%d][%d]=%-3d\n", i, j, a[i][j]);
                }
                printf("\n");
        }
        system("pause");
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-17 10:31:37 | 显示全部楼层
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
        int a[3][4] = { {16,11,12,2},{9,8,7,6},{4,3,15,1}};
        int h = 0;
        int j;
        for (int i = 0; i < 3; i++) {
                for ( j = 0; j < 4; j++) {
                        if ( a[j]> a[j + 1]) {
                                h =a[j];
                                a[j] = a[j + 1];
                                a[j + 1] = h;
                        }
                }
        }
        for (int i = 0; i < 3; i++) {
                for (j = 0; j < 4; j++) {
                        printf("a[%d][%d]=%-3d\n", i, j, a[j]);
                }
                printf("\n");
        }
        system("pause");
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-17 10:32:47 | 显示全部楼层
买了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-17 10:34:03 | 显示全部楼层

这样子怎么上传的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-17 10:35:29 | 显示全部楼层
本帖最后由 liuzhengyuan 于 2020-5-17 10:44 编辑
miniArce 发表于 2020-5-17 10:28
#define _CRT_SECURE_NO_WARNINGS
#include
#include

for (int j = 0; j < 4 - 1; j++) 
排序改成这样试试

如何正确地发代码、上传图片和附件?
(出处: 鱼C论坛)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-17 10:47:29 | 显示全部楼层
liuzhengyuan 发表于 2020-5-17 10:35
排序改成这样试试

如何正确地发代码、上传图片和附件?
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
        int a[3][4] = { {16,11,12,2},{9,8,7,6},{4,3,15,1}};
        int h = 0;
        int j;
        for (int i = 0; i < 3; i++) {
                for ( j = 0; j < 4; j++) {
                        if ( a[i][j]> a[i][j + 1]) {
                                h =a[i][j];
                                a[i][j] = a[i][j + 1];
                                a[i][j + 1] = h;
                        }
                }
        }
        for (int i = 0; i < 3; i++) {
                for (j = 0; j < 4; j++) {
                        printf("a[%d][%d]=%-3d\n", i, j, a[i][j]);
                }
                printf("\n");
        }
        system("pause");
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-17 11:43:51 | 显示全部楼层

回帖奖励 +1 鱼币

10楼讲解的很详细。提问的时候最好说清楚,比如此题是整个数组排序还是行排序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-20 03:57:49 | 显示全部楼层
chxchxkkk 发表于 2020-5-17 11:43
10楼讲解的很详细。提问的时候最好说清楚,比如此题是整个数组排序还是行排序

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-20 08:32:02 | 显示全部楼层

回帖奖励 +1 鱼币

1

评分

参与人数 1荣誉 -1 鱼币 -1 收起 理由
Mike_python小 -1 -1 请不要无意义灌水!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-20 09:55:44 | 显示全部楼层

Are you kidding me?  
11楼就是你想要的最佳答案?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-20 10:06:45 | 显示全部楼层

回帖奖励 +1 鱼币

11楼这个...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-20 10:08:56 | 显示全部楼层

回帖奖励 +1 鱼币

恶意评选最佳!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-20 10:09:10 | 显示全部楼层

回帖奖励 +1 鱼币

恶意评选最佳!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-22 09:06:47 | 显示全部楼层
荒唐事。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-23 13:10:39 | 显示全部楼层

回帖奖励 +1 鱼币

鱼币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-23 14:50:49 | 显示全部楼层
鱼币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-14 02:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表