C语言二维数组中存放二维坐标按纵坐标大小排序

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

运行结果:

猜你喜欢

转载自blog.csdn.net/shichunxue/article/details/81459255