1、要实现归并排序便要有递归的思想。
2、归并排序便是利用递归将数组里面的数每次取出一半再进行排序。
3、归并排序的最好、最坏和平均时间复杂度都是O(nlogn),而空间复杂度是O(n)
下面时实现代码
#include<iostream>
#include<cstdio>
using namespace std;
int a[10] = {3,5,91,2,6,8,7,4,11,56};
int b[10];
void Merge(int a[],int s,int m,int e, int temp[])
{
int p = 0;
int a1 = s, b1 = m+1;
while(a1 <= m && b1 <= e) //对两段数据进行排序
{
if(a[a1] < a[b1])
{
temp[p] = a[a1];
a1++;
p++;
}
else
{
temp[p] = a[b1];
b1++;
p++;
}
}
while(a1<=m)
{
temp[p] = a[a1];
p++;
a1++;
}
while(b1<=e)
{
temp[p] = a[b1];
p++;
b1++;
}
for(int i = 0; i < p; i++)
{
a[s+i] = temp[i];
}
}
void MergeSort(int a[],int s,int e, int temp[])
{
if(s<e) //用if语句判断当s>=e时自动return
{
int m = s+(e-s)/2; //每次对数据进行平分
MergeSort(a, s, m, temp);
MergeSort(a, m+1, e, temp);
Merge(a, s, m, e, temp);
}
}
int main()
{
MergeSort(a,0,9,b);
for(int i = 0; i < 10; i++)
{
cout << a[i] << " ";
}
cout << endl;
return 0;
}