归并排序:
1.划分
2.分治
3.合并
void Merge(int* data, int start, int mid, int end)
{
int* left_data = new int[mid - start + 1];
int* right_data = new int[end - mid];
int left_length = mid - start + 1;
int right_length = end - mid;
int left = 0, right = 0;
for (int i = start; i <= mid; ++i)
left_data[left++] = data[i];
for (int i = mid + 1; i <= end; ++i)
right_data[right++] = data[i];
left = 0;
right = 0;
int p= start;
while (left < left_length&&right <right_length)
{
if (left_data[left] < right_data[right])
data[p++] = left_data[left++];
else
data[p++] = right_data[right++];
}
while (left < left_length)
data[p++] = left_data[left++];
while (right < right_length)
data[p++] = right_data[right++];
delete[] left_data;
delete[] right_data;
}
void mergeSort(int* data, int start, int end)
{
if (end > start)
{
int mid = (end + start) / 2;
mergeSort(data, start, mid);
mergeSort(data, mid + 1, end);
Merge(data, start, mid,end);
}
}