归并排序是将数组中数两两合成有序表,然后再将有序表两两合成新的有序表,直到所有有序表合成一个有序表,完成排序。
归并排序是稳定的排序算法,需要辅助空间O(n),最好和最坏的情况下时间复杂度都是O(nlogn)。
参考代码:
#include <iostream>
using namespace std;
void Sort(int *arrays, int start, int mid, int end, int *tmp);
void MergingSort(int *array, int start, int end, int *tmp);
int main(void)
{
int arrays[]={49,38,65,87,76,13,27};
int tmp[7];
int i;
MergingSort(arrays,0,6,tmp);
for (i=0;i<7;i++)
{
cout <<arrays[i]<<" ";
}
cout <<endl;
return;
}
void Sort(int *arrays, int start, int mid,int end, int *tmp)
{
int i,j,k;
i=start;
j=mid+1;
k=0;
while (i<=mid && j<=end)
{
if (arrays[i]<arrays[j])
{
tmp[k++]=arrays[i++];
}
else
{
tmp[k++]=arrays[j++];
}
}
while (i<=mid)
{
tmp[k++]=arrays[i++];
}
while (j<=end)
{
tmp[k++]=arrays[j++];
}
for (i=0;i<k;i++)
{
arrays[start+i]=tmp[i];
}
}
void MergingSort(int *array, int start, int end, int *tmp)
{
int mid;
if (start<end)
{
mid=(start+end)/2;
MergingSort(array,start,mid,tmp);
MergingSort(array,mid+1,end,tmp);
Sort(array,start,mid,end,tmp);
}
}

3万+

被折叠的 条评论
为什么被折叠?



