对二维数组每行进行快速排序
用了论坛的搜索功能,但是并没有查到什么,所以只好再开个新帖,请各位见谅。问题选自:http://www.(NOIP2010普及组第四题) ,本题看起来很复杂,但是仔细看看却是选择第二大的数,思路就是把每行排序,直接选择第二个。
但是写了代码后无法给数组每行排序:(加了打印函数,方便调试)。
程序代码:
#include <stdio.h> #include <stdlib.h> void Qsort(long general[500][500],long startPos,long endPos,long n)//m为当前元素个数,n为记录当前列数,startPos为开始元素,endPos为结束元素 { long temp=general[n][0],i,j; i=startPos,j=endPos; while(i<j) { while(temp>=general[n][j]&&i<j)j--; general[n][i]=general[n][j]; while(temp<=general[n][i]&&i<j)i++; general[n][j]=general[n][i]; } general[n][i]=temp; if(i-1>startPos)Qsort(general,startPos,i-1,n); if(endPos>i+1)Qsort(general,i+1,endPos,n); } void print(long general[500][500],long n) { long i,j; for(i=0;i<n-1;i++) { printf("\n"); for(j=0;j<n-1;j++) printf("%d ",general[i][j]); } printf("\nOK!\n"); } int main() { long general[500][500],i,j,n,m=0; memset(general,0,sizeof(general[0][0])); scanf("%ld",&n); m=n-1;//记录列数 for(i=0;i<n-1;i++) for(j=i;j<n-1;j++) { scanf("%ld",&general[i][j]); general[j][i]=general[i][j]; } print(general,n); for(i=0;i<n-1;i++)//增加列数,对每行进行排序 { Qsort(general,0,m,i); m--; } print(general,n); system("pause"); return 0; }