2012年7月5日 星期四

Merge Sort


#include <stdio.h>

int tmp[100];


void merge(int *arr, int left, int mid, int right)
{
    int i, j, index1, index2;

    i = 0;
    index1 = left;
    index2 = mid+1;
    while (index1 <= mid && index2 <= right) {
        if (arr[index1] < arr[index2]) {
            tmp[i] = arr[index1];
            index1++;
        }
        else {
            tmp[i] = arr[index2];
            index2++;
        }
        i++;
    }

    for (; index2 <= right; i++, index2++)
        tmp[i] = arr[index2];
    for (; index1 <= mid; i++, index1++)
        tmp[i] = arr[index1];

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

void mergeSort(int *arr, int left, int right)
{
    if (left < right) {
        int mid = (left + right) / 2;
        mergeSort(arr, left, mid);
        mergeSort(arr, mid+1, right);
        merge(arr, left, mid, right);
    }
}

int main(void)
{
    int num[10] = {1, 289, 4, 5678, 2345, 2323, 1123, -1, 20, 58};
    int i;

    mergeSort(num, 0, 9);

    for (i = 0; i < 10; i++)
        printf("%d ", num[i]);

    return 0;
}

沒有留言:

張貼留言