归并排序
思想 : 采用递归的方式,将一个数组分解成若干个已经排好序的小数组,进行整合排序
void Merge(int a[], int start, int mid ,int end)
{
int* b = new int[high-low +1];
int i = start, j = mid + 1, k = 0;
while (i <= mid && j <= end)
{
if (a[i] < a[j])
{
b[k++] = a[i++];
}
else
{
b[k++] = a[j++];
}
}
while (i <= mid) b[k++] = a[i++];
while (j <= end) b[k++] = a[j++];
for (int i= start,k=0; i<= end; i++)
{
a[i] = b[k++];
}
delete[] b;
b = nullptr;
}
对于排序的数组进行组合
void mergeSort(int a[], int start, int end)
{
if(start < end)
{
mid = (start+end)/2;
}
mergeSort(a,start,mid);
mergeSort(a,mid+1,end);
Merge(a,start,mid,high);
}
测试用例
#include<iostream>
int main()
{
int a[] = { 1,21,63,4,5,32,77,64,64,9,87,54,645,0};
std::cout << "before Sort: " << std::endl;
int arrLen = sizeof(a) / sizeof(int);
for (int i = 0; i < arrLen; i++)
{
std::cout << a[i] << "\t";
}
std::cout << std::endl;
sortKinds::MergeSort(a,0,13);
std::cout << "after Sort: " << std::endl;
for (int i = 0; i < arrLen; i++)
{
std::cout << a[i] << "\t";
}
std::cout << std::endl;
}
递归较难理解,在vs下打几个断点看一下整个递归的过程或许会有更深的理解