归并排序
来源:互联网 发布: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