对二维数组每行进行快速排序
用了论坛的搜索功能,但是并没有查到什么,所以只好再开个新帖,请各位见谅。问题选自: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;
}







