wuyindengliu 2011-11-26
#include <stdio.h>
void simple_select(int a[], int n)
{
int i,j,k,tmp;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(a[j]<a[k])
k=j;
}
if(k!=i)
{
tmp=a[k];
a[k]=a[i];
a[i]=tmp;
}
}
}
void shift(int a[], int low, int high)
{
int i=low;
int j=2*i;
int tmp=a[i];
while(j<=high)
{
if(j<high && a[j]<a[j+1])
j++;
if(tmp<a[j])
{
a[i]=a[j];
i=j;
j=2*i;
}
else
break;
}
a[i]=tmp;
}
/*the number of elements of a is n+1*/
/*a[0] is not used*/
void heap_sort(int a[], int n)
{
int i,tmp;
for(i=n/2;i>=1;i--)
shift(a,i,n);
for(i=n;i>=2;i--)
{
tmp=a[i];
a[i]=a[1];
a[1]=tmp;
shift(a,1,n-1);
}
} 要知道时间复杂度只是描述一个增长趋势,复杂度为O的排序算法执行时间不一定比复杂度为O长,因为在计算O时省略了系数、常数、低阶。实际上,在对小规模数据进行排序时,n2的值实际比 knlogn+c还要小。