问题描述:一个足够大的二维数组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)); }