void MergeSortCore(int* data, int* copy, int first, int last);
void MergeSort(int* data, int length)
{
if(data == NULL || length <= 0) return;
int* copy = new int[length];
for(int i = 0; i < length; i++)
copy[i] = data[i];
MergeSortCore(data, copy, 0, length - 1);
for(int i = 0; i < length; i++)
data[i] = copy[i];
delete[] copy;
return;
}
void MergeSortCore(int* data, int* copy, int first, int last)
{
if(first == last)
copy[first] = data[first];
else
{
int mid = first + (last - first)/2;
MergeSortCore(copy, data, first, mid);
MergeSortCore(copy, data, mid + 1, last);
//merge
int i = first, j = mid + 1;
int k = first;
while(i <= mid && j <= last)
{
if(data[i] <= data[j]) copy[k++] = data[i++];
else copy[k++] = data[j++];
}
while(i <= mid) copy[k++] = data[i++];
while(j <= last) copy[k++] = data[j++];
}
}
数组的归并排序(经典实现:使用Ο(n)的辅助空间,递归)
最新推荐文章于 2023-01-31 00:18:58 发布