1.归并:
1.1 性能分析:
时间效率:O(nlog2n)
空间效率:O(n)
稳 定 性:稳定
1.2 模板程序:
#include<bits/stdc++.h>
using namespace std;
int a[8]={3,7,8,10,2,5,11,12};
int b[8];
void M(int a[],int s,int m,int end,int cent[])
{
int r=0;
int pa=s;
int pb=m+1;
while(pa<=m&&pb<=end)
{
if(a[pa]<a[pb])
cent[r++]=a[pa++];
else
cent[r++]=a[pb++];
}
while(pa<=m)//后半部分全部比较完毕,只剩下前半部分
{
cent[r++]=a[pa++];
}
while(pb<=end)// 前半部分全部比较完毕,只剩下后半部分
{
cent[r++]=a[pb++];
}
for(int i=0;i<end-s+1;i++)
a[i+s]=cent[i];
}
void Msort(int a[],int s,int end,int cent[])
{
if(s<end)
{
int m=s+(end-s)/2;//思想还是二分
Msort(a,s,m,cent);
Msort(a,m+1,end,cent);
M(a,s,m,end,cent);
}
}
int main()
{
int size=sizeof(a)/sizeof(int);//求数组个数方法
Msort(a,0,size-1,b);
for(int i=0;i<size;i++)
cout<<a[i]<<" ";
cout<<endl;
}
2.快速排序:
2.1 模板程序:
#include<bits/stdc++.h>
using namespace std;
int a[8]={3,7,8,10,2,5,11,12};
void change(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}
void Qsort(int a[],int s,int end)
{
if(s>=end) return ;
int i=s;
int j=end;
int k=a[s];//监视哨
while(i<j)
{
while(i<j&&a[j]>k)// 可控制生序降序
j--;
change(a[j],k);
while(i<j&&a[i]<k)// 可控制生序降序
i++;
change(a[i],k);
}
Qsort(a,s,i);
Qsort(a,i+1,end);
}
int main()
{
int size=sizeof(a)/sizeof(int);
Qsort(a,0,size-1);
for(int i=0;i<size;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
}