问题描述:一个足够大的二维数组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>
#include <stdlib.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;
}
结果:
而我是建立了一个结构,将点坐标存放到容器当中,对容器中的坐标点进行排序:
代码:
struct Point
{
double x;
double y;
};
//对x坐标点进行升序
#include <stdio.h>
#include <stdlib.h>
void sort_x(vector<Point> point,int n)
{
int i,j,k;
double t,u;
for(i=0;i<n-1;++i)
{
k=i;
for(j=i+1;j<n;++j)
{
if(point[k].x>point[j].x)
k=j;
}
if(k!=i)
{
t=point[k].x;
point[k].x=point[i].x;
point[i].x=t;
u=point[k].y;
point[k].y=point[i].y;
point[i].y=u;
}
}
//将排序后的坐标点存放到一个新容器当中
for(int i = 0; i<5 ;i++)
x_points.push_back(point.at(i));
}