归并排序的思想在于divide and conquer。一般的归并排序的时间复杂度为O(nlogn)。由于需要一个附加的同样长度的辅助空间,所以它的空间复杂度为O(n)。在conquer时,笔者尝试将插入排序的思想应用于归并的过程中,从而将归并排序的空间复杂度优化至O(1)。下面是普通归并排序的实现:
#include“iostream”
using namespace std;
void sort1(int *p1,int *p2,int left,int middle,int right)
{
for(int i=left;i
p2[i]=p1[i];
int current1=left;
int current2=middle;
int a=left;
while(current1
{
if(p2[current1]
p1[a]=p2[current1++];
else
p1[a]=p2[current2++];
a++;
}