マージソート

本日のアルゴリズムは【マージソート】です。
マージソートは分割統治法を用いたソートアルゴリズムです。
分割統治法とは、そのままでは解決できない問題を小さな問題に分割していき、問題を解決していく方法。
クイックソートよりも遅いとも言われるマージソートですが、クイックソートよりもスタックの消費が少ないのでマージソートを使うケースも多いです。


#include

/* 定数の定義 */
#define MERGE_DATA 10

/* 関数のプロトタイプ宣言 */
void MergeSort( int *array, int left, int right );

void main()
{
    int i;
    int array[MERGE_DATA] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };

    /* マージソートを行う */
    MergeSort( array, 0, MERGE_DATA - 1 );

    for( i = 0; i < MERGE_DATA; i++ ) {
        printf( "%d\n", array[i] );
    }
}

void MergeSort( int *array, int left, int right ) {
    int center;
    int i;
    int j;
    int k;
    int temp[ERGE_DATA];

    if( left >= right ) {
        return;
    }

    center = ( left + right ) / 2;
    MergeSort( array, left, center );
    MergeSort( array, center + 1, right );

    for( i = left; i <= center; i++ ) {
        temp[i] = array[i];
    }

    for( i = center + 1, j = right; i <= right; i++, j-- ) {
        temp[i] = array[i];
    }

    i = left;
    j = right;

    for( k = left; k <= right; k++ ) {
        if( temp[i] <= temp[j] ) {
            array[k] = temp[i++];
        }else{
            array[k] = temp[j--];
        }
    }
}


にほんブログ村 IT技術ブログへ
にほんブログ村
にほんブログ村 IT技術ブログ プログラム・プログラマへ
にほんブログ村