配列を並び替える関数

 今回はstdlib.hのヘッダファイルをincludeすれば使えるようになる命令の中から、配列の要素を並び替えるqsort関数について説明します。アルゴリズムについて学習を行うと、バブルソートなどの並び替えるためのプログラムの書き方について学習する機会があります(今後プログラミングをしていきたいのであれば、アルゴリズムを学習することをお勧めします)が、qsort関数を使えば、自分でソートのアルゴリズムを実装していかなくてもコンピュータが並び替えをしてくれます。

 以下のサンプルプログラムを作成し、実行してみて下さい。

#include <stdio.h>
#include <stdlib.h>		//stdlib.hのインクルードを忘れずに

int ascSort(const void* v1, const void* v2) {
    const int _v1 = *((const int*)v1);
    const int _v2 = *((const int*)v2);

    if ( _v1 > _v2 ) {
        return 1;
    } else if ( _v1 < _v2 ) {
        return -1;
    } else {
        return 0;
    }
}

int main(int argc, const char * argv[])
{
    
    // insert code here...
    int num[5];
    
    num[0] = 3;
    num[1] = 2;
    num[2] = 4;
    num[3] = 5;
    num[4] = 1;
    
    for(int i = 0; i < 5; i++) {
        printf("num[%d] = %d\n", i, num[i]);
    }
    
    printf("ソート実施。\n");
    qsort(num, 5, sizeof(num[0]), ascSort);
    
    for(int j = 0; j < 5; j++) {
        printf("num[%d] = %d\n", j, num[j]);
    }
    
    return 0;
}

 実行すると、以下のような結果が表示されます。

num[0] = 3
num[1] = 2
num[2] = 4
num[3] = 5
num[4] = 1
ソート実施。
num[0] = 1
num[1] = 2
num[2] = 3
num[3] = 4
num[4] = 5

 少々難しいので補足しますと、qsort関数の引数は、qsort([並び替える配列], [配列の長さ], [各要素のサイズ], [比較するための自作関数])となっています。4つ目の関数は、今回はascSortというサブルーチンを作成しましたが、昇順か降順かを指定するための関数を自分で作るというものです。昇順で良ければ、このascSortを流用すれば問題ありません。正しく引数を指定さえすれば、ソートのアルゴリズムはqsort関数で定義されているので、コンピュータが自動で並び替えてくれるのです。

■スポンサーリンク

このページの先頭へ