1 回答

TA貢獻1810條經(jīng)驗 獲得超4個贊
在C語言中,二維數(shù)組按行存儲,對每一行排序很方便,可以把每一行當成一個一維數(shù)組,使用排序函數(shù)直接進行排序。 然而對每一列進行排序,就不能直接當成一維數(shù)組進行排序。但是仍然可以把第j列a[0...M-1][j]在邏輯上當成一維數(shù)組進行排序,下面以使用冒泡排序為例對其排序。 對二維數(shù)組按列排序后,進一步展示了如何調(diào)用快速排序函數(shù)按行進行排序。 程序源碼: #include #include #define M 3 #define N 3 //輸出二維數(shù)組的函數(shù) 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"); } } //qsort的cmp函數(shù) 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("按列排序前的二維數(shù)組是:\n"); print(a); printf("\n"); int j; for(j=0;j/對每一列進行升序排序 { //對第j列進行排序 int m,n; int t; for(m=M-1;m>0;m--) { for(n=0;na[n+1][j]) { t=a[n][j]; a[n][j]=a[n+1][j]; a[n+1][j]=t; } } } } printf("按列排序后二維數(shù)組變?yōu)椋篭n"); print(a); printf("\n"); //對按列排序后的二維數(shù)組按行升序排序 (調(diào)用快速排序函數(shù)) int i; for(i=0;i<M;i++) { qsort(a[i],N,sizeof(a[i][0]),cmp); } printf("按列排序后再按行排序后二維數(shù)組變?yōu)椋篭n"); print(a); printf("\n"); system("pause"); return 0; } 編譯運行后的結(jié)果如下: 程序源碼和編譯后的可執(zhí)行程序已經(jīng)打包放在附件里,可以直接下載運行
- 1 回答
- 0 關(guān)注
- 122 瀏覽
添加回答
舉報