归并排序非递归写法

来源:互联网 发布:鲁大师垃圾软件 编辑:程序博客网 时间:2024/06/05 10:50
void _Merge(int arr[], int* tmp, int begin1, int end1, int begin2, int end2){int index = begin1;while (begin1 <= end1&&begin2 <= end2){tmp[index++] = arr[begin1]<arr[begin2] ? arr[begin1++] : arr[begin2++];}while (begin1 <= end1){tmp[index++] = arr[begin1++];}while (begin2 <= end2){tmp[index++] = arr[begin2++];}}void MergeSort_NonR(int* A,int* tmp, int n){int step = 2;int left = 0, right = 0, mid = 0;while (step <= n){int cur = 0;while (cur + step <= n){right = cur + step-1, left = cur; mid = (left + right) / 2;_Merge(A, tmp, left, mid, mid + 1, right);cur += step;}if (cur < n - 1){ mid = (cur + n-1) / 2;_Merge(A, tmp, cur, mid, mid + 1, n);}step *= 2;}mid = (0 + n-1) / 2;_Merge(A, tmp, 0, mid, mid + 1, n - 1);}int* mergeSort(int* A, int n){if (A == NULL || n <= 0)return A;int* tmp = new int[n];memset(tmp, 0, sizeof(tmp));MergeSort_NonR(A, tmp, n);delete[] tmp;return A;}

0 0