问题描述:一个足够大的二维数组a[ ][2]中,存放了n对坐标,例如第一个坐标是(5,6),那么a[0][0]=5,a[0][1]=6,依此类推,将存放的这些坐标对,按照纵坐标从小到大的顺序进行排列。
输入:
(1,25)
(20,36)
(4,18)
(23,15)
(22,5)
输出:
(22,5)
(23,15)
(4,18)
(1,25)
(20,36)
代码如下:
#include <stdio.h>
#define max 100
double A[max][2]={1,25,20,36,4,18,23,15,22,5};
void sort(double a[][2],int n)
{
int i,j,k;
double t;
for(i=0;i<n-1;++i)
{
k=i;
for(j=i+1;j<n;++j)
{
if(a[k][1]>a[j][1])
k=j;
}
if(k!=i)
{
for(j=0;j<2;++j)
{
t=a[k][j];
a[k][j]=a[i][j];
a[i][j]=t;
}
}
}
}
int main(int argc, const char * argv[]) {
// insert code here...
printf("Hello, World!\n");
int n=5;
int i;
printf("排序前:\n");
for(i=0;i<n;i++)
{
printf("(%f,%f)\n",A[i][0],A[i][1]);
}
sort(A,n);
printf("排序后:\n");
for(i=0;i<n;i++)
{
printf("(%f,%f)\n",A[i][0],A[i][1]);
}
return 0;
}
运行结果: