归并排序

来源:互联网 发布:淘宝上如何搜索咸鱼 编辑:程序博客网 时间:2024/04/28 02:08
/*归并排序*/#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <time.h>#define BASE 1024void mergeSort(int*, int, int);void merge(int*, int, int, int);int main(void){    int n;    int i;    int *array = NULL;    srand((unsigned)time(NULL));    while (scanf("%d", &n))    {        array = (int*)malloc(sizeof(int) * n);        for (i = 0; i < n; ++i)        {            array[i] = rand() % BASE;            printf("%d ", array[i]);        }        printf("\n");        mergeSort(array, 0, n - 1);        for (i = 0; i < n; ++i)        {            printf("%d ", array[i]);        }        printf("\n");    }getch();return 0;}void mergeSort(int *array, int left, int right){if (left < right){int middle = (left + right) / 2;mergeSort(array, left, middle);mergeSort(array, middle + 1, right);merge(array, left, middle, right);}}void merge(int *array, int left, int middle, int right){int *temp = (int*)malloc(sizeof(int) * (right - left + 1));int i = 0;int j = 0;int lbegin = left;int rbegin = middle + 1;int lend = middle;int rend = right;while (lbegin <= lend && rbegin <= rend ){if (array[lbegin] <= array[rbegin]){temp[i] = array[lbegin];++lbegin;++i;}else{temp[i] = array[rbegin];++rbegin;++i;}}if (lbegin <= lend){while (lbegin <= lend){temp[i] = array[lbegin];++lbegin;++i;}}if (rbegin <= rend){while (rbegin <= rend){temp[i] = array[rbegin];++rbegin;++i;}}for (j = left, i = 0; j <= right; ++j, ++i){array[j] = temp[i];}}