归并类
#include <iostream>
template <typename T> class MergeSort{
public:
static void mergeSort(T *nums, int left, int right){
if (left >= right)
return;
int pos = (left + right) >> 1;
mergeSort(nums, left, pos);
mergeSort(nums, pos + 1, right);
merge(nums, left, pos, right);
}
private:
static void merge(T *nums, int left, int pos, int right){
int low = left;
int high = pos+1;
T *temp = new T[right - left + 1];
int idx = 0;
while (low <= pos && high <= right){
if (nums[low] > nums[high]){
temp[idx++] = nums[high];
++high;
}
else{
temp[idx++] = nums[low];
++low;
}
}
while (low <= pos){ temp[idx++] = nums[low++]; }
while (high <= right){ temp[idx++] = nums[high++]; }
for (int i = 0; i < idx; ++i){
nums[left + i] = temp[i];
}
delete[] temp;
}
};
main func
#include <iostream>
#include "MergeSort.h"
using namespace std;
int main()
{
int data[] = { 12, 34, 54, 2, 576, 45, 8, 59 };
int len = sizeof(data) / sizeof(data[0]);
MergeSort<int>::mergeSort(data, 0, len - 1);
for (auto d : data){
std::cout << d << " ";
}
system("pause");
return 0;
}