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还要小。