快速排序、堆排序和归并排序理论上时间复杂度为O(nlogn ),是内存占用较少的情况下,速度最快的排序算法。
当然桶排序的时间复杂度为O(n),但是需要牺牲巨大内存。
#include<iostream>
using namespace std;
void Dui(int a[],int i,int n)
{
int j,temp;
j=i*2+1;
temp=a[i];
while(j<n)
{
if(a[j]>temp)
break;
if(j+1<n&&a[j+1]<a[j])
j++;
a[i]=a[j];
i=j;
j=j*2+1;
}
a[i]=temp;
}
void Built(int a[],int n)
{
for(int i=n/2-1;i>=0;i--)
{
Dui(a,i,n);
}
}
void Sort(int a[],int n)
{
cout<<a[0]<<endl;
for(int i=n-1;i>0;i--)
{
int temp=a[0];
a[0]=a[i];
a[i]=temp;
Dui(a,0,i);
cout<<a[0]<<endl;
}
}
int main()
{
int a[5]={3,1,2,5,4};
int n=5;
Built(a,n);
Sort(a,n);
return 0;
}