#include <stdio.h>
#define iline 2//行。fun3()中用
#define irow 8//列。fun3()中用
 
/***************************
例子中:
    以字符数组为例。
    以冒泡排序为排序方法。
----************************/
 
//第一种方法:将二维数组转置到一维数组,再对一维数组排序
void fun1()
{
    int i=0,j=0,k=0,t=0;
    char a[2][8]={"1354689","3456378"};
    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]={"1354689","3456378"};
    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]={"1354689","3456378"};
        printf("\nfun3()运行如下:\n");
 
        for(i=0;i<iline*irow;i++)
        {
            for(j=0;j<iline*irow;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;
}
Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐