C语言 如何对二维数组进行按列排序?

Python09

C语言 如何对二维数组进行按列排序?,第1张

无论是多少维的数组,机内都是一维的,以行优先存放。所以直接降为一维数组排序最方便省事。下面以二维数组为例写出代码——

#include "stdio.h"

int main(int argc,char *argv[]){

int x[3][3]={{9,4,3},{6,2,7},{5,8,1}},i,j,k,*p

printf("Before ordering is as follows:\n")

for(i=0i<3i++){

for(j=0j<3printf("%2d",x[i][j++]))

printf("\n")

}

for(p=(int *)x,i=0i<9i++){//用p=(int *)x将x降为一维数组p,选择法排序

for(k=i,j=k+1j<9j++)

if(p[k]>p[j])

k=j

if(k!=i)

j=p[k],p[k]=p[i],p[i]=j

}

printf("Sorted as follows:\n")

for(i=0i<3i++){//输出排序后的二维数组

for(j=0j<3printf("%2d",x[i][j++]))

printf("\n")

}

return 0

}

运行结果:

不是

这么说吧,数组名本身就是指针,指向数组的第一个元素

至于你所说的调用调用二级(二维吧)数组,难道不是如普通变量般直接调用吗?

根据问题补充说,这是不允许的,main()函数的形参是固定的不能传递指针。而一般的自定义函数只能用传递首地址的形式来传递二维数组,例子如下:

定义:int

a[x][y]

int

func(int

*p,int

x,int

y){

//x,y即为调用x行y列的元素

printf("%d\

",p+x*x+y);

//这里是通过计算指针位置实现

return

0}

调用:

func(a,3,3)

这种通过计算地址方法调用相当麻烦。。可以考虑将数组定义在结构中,再将结构进行形参传递,当这样会降低效率...例子如下

#include<stdio.h>

typedef

struct{

int

a[5][5]}te

te

test

int

func(te

a,int

x,int

y){

printf("%d\

",a.a[x][y])

return

0}

int

main()

{

test.a[3][3]=5

func(test,3,3)

getch()

return

0}

#include <stdio.h>

#include "stdlib.h"

#include "time.h"

int main(int argc,char *argv[]){

    int a[5][8],i,j,k,t,*p

    printf("排序前:\n")

    srand((unsigned)time(NULL))

    for(i=0i<5i++){//为二维数组赋值

        for(j=0j<8printf("%3d",a[i][j++]=rand()%100))

        printf("\n")

    }

    printf("排序后:\n")

    p=(int *)a//降为一维,这样排序简单

    for(t=i=0i<40i++){//选择法排序

        for(k=i,j=k+1j<40j++)

            if(p[k]>p[j])

                k=j

        if(k!=i)

            j=p[k],p[k]=p[i],p[i]=j

        printf(++t%8 ? "%3d" : "%3d\n",p[i])

    }

    return 0

}