但是,對每壹列進行排序不能直接作為壹維數組進行排序。然而,第j列a[0...M-1][j]仍然可以作為壹維數組進行邏輯排序。我們以冒泡排序為例進行排序。
對二維數組按列排序後,進壹步展示了如何調用快速排序函數按行排序。
程序源代碼:
#包含?& ltstdio.h & gt
#包含?& ltstdlib.h & gt
#定義?m?三
#定義?n?三
//輸出二維數組的函數
作廢?print(int?a[][N])
{
int?I,j;
for(I = 0;我& ltm;i++)
{
for(j = 0;j & ltn;j++)
{
printf("%d?",a[I][j]);
}
printf(" \ n ");
}?
}
//qsort的cmp函數
int?cmp(常量?void*a,?const?作廢?*b)
{
回歸?*(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 ");
打印(壹份);
printf(" \ n ");
int?j;
for(j = 0;j & ltn;J++)//對每壹列進行升序排序?
{
//對j列進行排序?
int?m,n;
int?t;
for(M = M-1;m & gt0;m -)
{
for(n = 0;n & ltm;n++)
{
if(a[n][j]& gt;a[n+1][j])
{
t = a[n][j];
a[n][j]= a[n+1][j];
a[n+1][j]= t;
}
}?
}?
}?
Printf("二維數組按列排序後變成:\ n ");
打印(壹份);
printf(" \ n ");?
//將按列排序的二維數組按行升序排序?(調用快速排序功能)?
int?我;
for(I = 0;我& ltm;i++)
{
qsort(a[i],N,sizeof(a[i][0]),CMP);
}?
Printf("先按列排序,再按行排序,二維數組變成:\ n ");
打印(壹份);
printf(" \ n ");
系統(“暫停”);
回歸?0;
}
編譯運行後的結果如下:
程序源代碼和編譯後的可執行程序已經打包在附件中,可以直接下載運行。