归并排序
来源:互联网 发布:淘宝上如何搜索咸鱼 编辑:程序博客网 时间: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];}}