猿问

排序出错,具体程序如下:该怎么修改?

program main

implicit none

integer,parameter :: M=2,N=3

integer :: b(2,3)=(/2,8,10,9,6,7/)

integer :: aa(2,3),c(3)

integer :: i,j,k,l,temp

do i=1,2

do j=1,3

write(*,*) i,j,b(i,j)

c(j)=b(i,j)
call BUBBLE_SORT(c,j)

aa(i,j)=c(j)

enddo

enddo

write(*,"(2(1xI2))") ((aa(i,j),i=1,2),j=1,3)

stop

end program main

subroutine BUBBLE_SORT(A,N)

implicit none

integer :: N,A(N)

integer I,J,K,TEMP

do I=N-1,1,-1

do J=1,I

if (A(J)>A(J+1))then

TEMP=A(J)

A(J)=A(J+1)

A(J+1)=TEMP

end if

enddo

enddo

return

end subroutine
输出的结果应该是

2 7

6 8

10 9

实际输出的结果是

2 8

10 9

10 9

慕运维8079593
浏览 102回答 1
1回答

慕莱坞森

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