亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

嘗試做了下 結果還是不對阿,請問該怎么修改?

嘗試做了下 結果還是不對阿,請問該怎么修改?

C
絕地無雙 2022-11-19 18:14:15
從鍵盤輸入5行4列的二維整型數組 a 的各元,然后將數組a各列元素分別按升序排序,再按行輸出數組a的各元.#include <stdio.h>#define M 5#define N 4main(){int a[M][N],i,j,k,t=0;for(i=0; i<M; i++)for(j=0; j<N; j++)scanf("%d", &a[i][j]);for(j=0;j<N;j++){for(i=0;i<M;i++){for(k=0;k<M;k++)if(a[k][j]>a[k+1][j]){ t=a[k][j];a[k][j]=a[k+1][j];a[k+1][j]=t;}}}for(i=0;i<M;i++){printf("\n");for(j=0;j<N;j++)printf("%d ",a[i][j]) ;}}
查看完整描述

2 回答

?
慕標琳琳

TA貢獻1830條經驗 獲得超9個贊

在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");   } //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++)//對每一列進行升序排序     {       //對第j列進行排序        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;                  }                           printf("按列排序后二維數組變為:\n");    print(a);    printf("\n");          //對按列排序后的二維數組按行升序排序 (調用快速排序函數)          int i;    for(i=0;i<M;i++)    {        qsort(a[i],N,sizeof(a[i][0]),cmp);             printf("按列排序后再按行排序后二維數組變為:\n");    print(a);    printf("\n");    system("pause");    return 0;}

編譯運行后的結果如下:


 


查看完整回答
反對 回復 2022-11-22
?
Cats萌萌

TA貢獻1805條經驗 獲得超9個贊

冒泡法。。
#include <stdio.h> 
#define M 5 
#define N 4 
void main() 

int a[M][N],i,j,k,t=0; 
for(i=0; i<M; i++) 
for(j=0; j<N; j++) 
scanf("%d", &a[i][j]); 
for(j=0;j<N;j++) 
{
for(i=0;i<M;i++)
{
for(k=M-1;k>i;k--)
if(a[k][j]<a[i][j]) 

t=a[k][j]; 
a[k][j]=a[i][j]; 
a[i][j]=t;




for(i=0;i<M;i++) 
{
printf("\n"); 
for(j=0;j<N;j++) 
printf("%d ",a[i][j]) ; 


}
你的K+1會超過M的。


查看完整回答
反對 回復 2022-11-22
  • 2 回答
  • 0 關注
  • 107 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號