クイックソート(2 D配列)クイックソート2 D配列


qsort関数を使うことができますが、cmpの戻り値の役割が分からないし、2次元配列のソートができないので、poj 1609をするときは2次元配列の速い列WAで一晩中、本当に憂鬱でした.それを徹底的に理解し、後で少し補充することを決意した.
qsort関数はコンパイラ関数ライブラリに付属する高速ソート関数であり、ヘッダファイルはstdlibである.h用法:qsort(void base,int nelem,int width,int(*fcmp)(const void,const void*)パラメータ:1.ソート対象配列の先頭アドレス2.配列内のソート対象要素の数3.各要素の占有空間の大きさ4.ソートの順序を決定するための関数へのポインタ
qsortを使用するには、まずcmp関数を定義する必要があります.
int cmp(const void *a, const void *b)
{
    return *(int*)a-*(int*)b;// 
}

負数を返すと、aがbの前に並ぶことを説明し、正数を返すと、aがbの後ろに並ぶことを説明し、0を返すと、aとbの前後関係がないことを説明し、小さいから大きいまで出力したい場合はa,bの位置を変える.
1次元配列は比較的簡単で、基本的に把握されていますが、2次元配列の並べ替えはずっと頭の痛い問題です.2次元配列は直接1次元配列の書き方で行うと、最初の列は小さいから大きいまで、2番目の列はランダムに乱されます.だから、1番目の列と同時に2番目の列も順番に出力するにはcmp関数を改善する実行可能な方法は構造体を使うことです.
struct node // 
{
    int x,y;
};
node a[10000];

int cmp(const void*p1,const void*p2)
{
    struct node*c=(node*)p1;
    struct node*d=(node*)p2;
    if(c->x!=d->x)
        return c->x-d->x;
    else
        return c->y-d->y;// 
}