2012年1月7日 星期六

Merge Sort

#include <stdio.h>

int num[100] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
int tmp[100];


void merge(int left, int right)
{
    int i, j, k;
    int mid = (left + right) / 2;

    for (k = 0, i = left, j = mid+1; i <= mid || j <= right; k++)
    {
        if (i > mid)
            tmp[k] = num[j++];
        else if (j > right)
            tmp[k] = num[i++];
        else if (num[i] < num[j])
            tmp[k] = num[i++];
        else
            tmp[k] = num[j++];
    }

    for (i = left, k = 0; i <= right; i++, k++)
        num[i] = tmp[k];
}


void mergeSort(int left, int right)
{
    int mid = (left + right) / 2;

    if (left < right)
    {
        mergeSort(left, mid);
        mergeSort(mid+1, right);
        merge(left, right);
    }
}

int main(void)
{
    mergeSort(0, 9);
    int i;
    for (i = 0; i < 10; i++)
        printf("%d", num[i]);

    return 0;
}

沒有留言:

張貼留言