如下数组,请问该怎么排序?

例如数组 {{4,2},{1,7},{4,5},{1,2},{1,1},{4,1}}排序后为{{1,1},{1,2},{1,7},{4,1},{4,2},{4,5}}

紫衣仙女
浏览 73回答 1
1回答

肥皂起泡泡

在C语言中,二维数组按行存储,对每一行排序很方便,可以把每一行当成一个一维数组,使用排序函数直接进行排序。然而对每一列进行排序,就不能直接当成一维数组进行排序。但是仍然可以把第j列a[0...M-1][j]在逻辑上当成一维数组进行排序,下面以使用冒泡排序为例对其排序。对二维数组按列排序后,进一步展示了如何调用快速排序函数按行进行排序。程序源码:#include <stdio.h>#include <stdlib.h>#define M 3#define N 3//输出二维数组的函数void print(int a[][N]){int i,j;for(i=0;i<M;i++){for(j=0;j<N;j++){printf("%d ",a[i][j]);}printf("\n");}&nbsp;}//qsort的cmp函数int cmp(const void*a, const void *b){return *(int*)a-*(int*)b;}int main(int argc, char* argv){int a[M][N]={3,2,1,9,8,7,6,5,4};printf("按列排序前的二维数组是:\n");print(a);printf("\n");int j;for(j=0;j<N;j++)//对每一列进行升序排序&nbsp;{//对第j列进行排序&nbsp;int m,n;int t;for(m=M-1;m>0;m--){for(n=0;n<m;n++){if(a[n][j]>a[n+1][j]){t=a[n][j];a[n][j]=a[n+1][j];a[n+1][j]=t;}}&nbsp;}&nbsp;}&nbsp;printf("按列排序后二维数组变为:\n");print(a);printf("\n");&nbsp;//对按列排序后的二维数组按行升序排序 (调用快速排序函数)&nbsp;int i;for(i=0;i<M;i++){qsort(a[i],N,sizeof(a[i][0]),cmp);}&nbsp;printf("按列排序后再按行排序后二维数组变为:\n");print(a);printf("\n");system("pause");return 0;}
打开App,查看更多内容
随时随地看视频慕课网APP