#include <iostream>
using namespace std;
template<class T>
void merge(T *arr, int p, int q, int r)
{
int i, k;
int s1 = p, e1 = q, s2 = q + 1, e2 = r;
T *temp = new T[r - p + 1];
k = 0;
while(s1 <= e1 && s2 <= e2)
{
if(arr[s1] < arr[s2])
{
temp[k ++] = arr[s1];
s1 ++;
}
else
{
temp[k ++] = arr[s2];
s2 ++;
}
}
while(s1 <= e1)
{
temp[k ++] = arr[s1 ++];
}
while(s2 <= e2)
{
temp[k ++] = arr[s2 ++];
}
for(int i = 0; i < r - p + 1; ++ i)
{
arr[p + i] = temp[i];
}
delete[] temp;
temp = 0;
}
template<class T>
void merge_sort(T *arr, int left, int right)
{
int mid = 0;
if(left < right)
{
mid = (right + left) / 2;
merge_sort(arr, left, mid);
merge_sort(arr, mid + 1, right);
merge(arr, left, mid, right);
}
}
int main()
{
int size;
cin >> size;
int *arr = new int[size];
for(int i = 0; i < size; ++ i)
cin >> *(arr+i);
merge_sort(arr, 0, size - 1);
for(int i = 0; i < size; ++ i)
cout << *(arr + i) << " ";
cout << endl;
}
常用排序算法——歸併排序
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.