#include <iostream>
#define MOD_MERGE // 是否优化
using namespace std;
int tempArr[100];
#ifndef MOD_MERGE
void 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++];
}
}
#else
void 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++];
}
}
#endif
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, 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;
}
归并排序
最新推荐文章于 2023-09-03 20:36:33 发布