归并排序

来源:互联网 发布:qq for ubuntu 14.04 编辑:程序博客网 时间:2024/06/03 12:34
#include <iostream>#define MOD_MERGE       // 是否优化 using namespace std;int tempArr[100];#ifndef MOD_MERGEvoid merge(int array[], int left, int right, int middle){    for (int i = left; i <= right; ++i) {        tempArr[i] = array[i];    }    int index1 = left;    int index2 = middle + 1;    int i = left;    while (index1 <= middle && index2 <= right) {        if (tempArr[index1] > tempArr[index2])             array[i++] = tempArr[index2++];        else            array[i++] = tempArr[index1++];     }    while (index1 <= middle) {        array[i++] = tempArr[index1++];    }    while (index2 <= right) {        array[i++] = tempArr[index2++];    }}#elsevoid merge(int array[], int left, int right, int middle){    for (int i = left; i <= middle; ++i) {        tempArr[i] = array[i];    }    for (int j = 1; j <= right - middle; ++j) {        tempArr[right - j + 1] = array[j + middle];    }    int index1, index2, k;    for (index1 = left, index2 = right, k = left; k <= right; ++k) {        if (tempArr[index1] > tempArr[index2])            array[k] = tempArr[index2--];        else            array[k] = tempArr[index1++];    }}#endifvoid 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, right, middle);    }}int main(){    cout << "test ... " << endl;    int arr[] = { 4, 5, 2, 2, 55, 553, 222, 21 };    mergeSort(arr, 0, sizeof(arr) / sizeof(arr[0]) - 1);    for (auto & i : arr) {        cout << i <<" " ;    }    cout << endl;    return 0;}
0 0