天天看點

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;
}
           

運作結果:

C語言二維數組中存放二維坐标按縱坐标大小排序