归并排序
class Solution {
public:
void mergesort(vector<int> &data)
{
}
void merge1(vector<int> &data, int start, int end)
{
int ret = end -start;
if (0 == ret)
return;
else if ( 1 == ret)
{
if (data[start] > data[end])
{
data[start] ^= data[end];
data[end] ^= data[start];
data[start] ^= data[end];
}
}
else
{
int middle = (start + end)/2;
merge1(data, start, middle);
merge1(data, middle+1, end);
vector<int > res = merge2(data, start, end);
for (int i=0;i<res.size();i++)
data[start + i] = res[i];
}
}
vector<int> merge2(vector<int> &data, int start, int end)
{
vector <int> res;
int middle = (start + end)/2;
int left = start;
int right = middle + 1;
while(left <= middle && right <= end)
{
if (data[left] < data[right])
res.push_back(data[left++]);
else
res.push_back(data[right++]);
}
while(left <= middle)
res.push_back(data[left++]);
while(right <= end)
res.push_back(data[right++]);
}
};