二维数组排序的三种方法

二维数组排序的三种方法include nbsp define nbsp iline nbsp 2 行 fun3 中用 define nbsp irow nbsp 8 列 fun3 中用 nbsp 例子中 nbsp nbsp nbsp nbsp 以字符数组为例 nbsp nbsp nbsp nbsp 以冒泡排序为排序方法 nbsp 第一种方法

#include 
#define iline 2//行。fun3()中用
#define irow 8//列。fun3()中用
 
/*
例子中:
    
以字符数组为例。
    
以冒泡排序为排序方法。
----/
 
//第一种方法:将二维数组转置到一维数组,再对一维数组排序
void 
fun1()
{
    
int 
i=0,j=0,k=0,t=0;
    
char 
a[2][8]={

""
,
""
};
    
char 
b[2*8];
    
printf
(
"fun1()运行如下:\n"
);
    
//将二维数组转置到一维数组
    
while
(i<2)
    
{
        
while
(j<8-1)
        
{
            
b[k++]=a[i][j];
            
j++;
        
}
        
i++;
        
j=0;
    
}
     
    
b[k]=
'\0'
;
//最后一个
    
puts
(b);
//先看看是不是成功转置
 
    
//以下比较容易理解的冒泡排序,一个个比较,交换。不过效率较低
    
for
(i=0;i<16;i++)
    
{
        
for
(j=0;j<16;j++)
        
{
            
if
(b[i]>b[j])
//从大到小排序,若要从小到大,你懂的。
            
{
                
//交换二者的值
                
t=b[i];
                
b[i]=b[j];
                
b[j]=t;
            
}
             
        
}
    
}
    
puts
(b);
//输出看看结果
}
 
void 
fun2()
//fun3是fun2的通用版本
{
    
int 
i=0,j=0;
    
char 
t;
    
char 
a[2][8]={

""
,
""
};
    
printf
(
"\nfun2()运行如下:\n"
);
 
    
for
(i=0;i<2*8;i++)
    
{
        
for
(j=0;j<2*8;j++)
        
{
            
if
(i==(i/8+1)*8-1 || j==(j/8+1)*8-1)
            
{
                
//什么都不做
            
}
            
else
            
{
                
if
(a[i/8][i%8]>a[j/8][j%8])
                
{
                    
t=a[i/8][i%8];
                    
a[i/8][i%8]=a[j/8][j%8];
                    
a[j/8][j%8]=t;
                
}
            
}
 
        
}
    
}
    
i=0;
    
while
(i<2)
    
{
        
puts
(a[i]);
        
i++;
    
}
}
void 
fun3()
{
        
int 
i=0,j=0;
        
char 
t;
        
char 
a[iline][irow]={

""
,
""
};
        
printf
(
"\nfun3()运行如下:\n"
);
 
        
for
(i=0;i

        
{
            
for
(j=0;j

            
{
                
if
(i==(i/irow+1)*irow-1 || j==(j/irow+1)*irow-1)
//还是要注意每行结尾的\0.
                
{
                    
//什么都不做
                
}
                
else
                
{
                    
if
(a[i/irow][i%irow]>a[j/irow][j%irow])
                    
{
                        
t=a[i/irow][i%irow];
                        
a[i/irow][i%irow]=a[j/irow][j%irow];
                        
a[j/irow][j%irow]=t;
                    
}
                
}
                 
            
}
        
}
        
i=0;
        
while
(i<2)
        
{
            
puts
(a[i]);
            
i++;
        
}
}
 
int 
main()
{
    
fun1();
//法一:将二维数组转成一维数组来做
    
fun2();
//法二:直接对二维数组排序
    
fun3();
//法二的通用版。不过这里数组是两行的,要对应哦。
            
//当然,这里也可以用更通用地用传参的方式将传入数组a[][irow].这些就自己想咯。
    
return 
0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/203196.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午10:21
下一篇 2026年3月19日 下午10:22


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号