C语言怎样对二维数组中每个元素进行选择排序

2025-03-23 14:36:04
推荐回答(2个)
回答1:

#include 
#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=0;i<5;i++){//为二维数组赋值
        for(j=0;j<8;printf("%3d",a[i][j++]=rand()%100));
        printf("\n");
    }
    printf("排序后:\n");
    p=(int *)a;//降为一维,这样排序简单
    for(t=i=0;i<40;i++){//选择法排序
        for(k=i,j=k+1;j<40;j++)
            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;
}

回答2:

1)核心思想是每行按顺序排列好,假定从小到大,然后,每列从小到大排序
2)假设数组为a[i_max][j_max]
核心代码
for(i=0;i
for(j=0;jfor(k=j+1;kif(a[i][k]{ t=a[i][j];
a[i][j]=a[i][k];
a[i][k]=t;

}

for(j=0;j
for(i=0;ifor(k=i+1;kif(a[k][j]{ t=a[i][j];
a[i][j]=a[k][j];
a[k][j]=t;

}
望采纳