#include<iostream> using namespace std; void insert_sort_function(int array[],int size) { int key; //总次数 单位时间 for(int i=1, j;i!=size;++i) //n c1 { if(array[i]<array[i-1]) //n-1 c2 { key=array[i]; //n-1 c3 j=i-1; //n-1 c4 do{ array[j+1]=array[j]; //Σt(i),i=2,3…n,t(i)为第i次while体循环的次数 c5 j--; //Σt(i),i=2,3…n c6 }while(j>=0 && key<array[j]); //Σt(i),i=2,3…n c7 array[j+1]=key; //n-1 c8 } } for(i=0;i!=size;++i) cout<<array[i]<<","; cout<<endl; } int main() { int array[]={5,2,4,6,1,3}; int size=6; insert_sort_function(array,size); return 0; }
以上是插入排序的代码。通常一个算法的运行时间是指在特定输入时,所执行的操作数(步数)。
则以上的算法的步数为n*c1+(n-1)*c2+(n-1)*c3+(n-1)*c4+c5*Σt(i)+c6*Σt(i)+c7*Σt(i)+c8*(n-1)
最好的情况下,整个数列为正序,则只会进行if(array[i]<array[i-1])判断,然后直接执行array[j+1]=key,则总消耗为n*c1+(n-1)*c2+c8*(n-1)=(c1+c2+c8)n-(c2+c8),即an+b~O(n).
最差的情况下,这个数列为倒序,则第i次,while循环体判断的次数为(i-1)次,则总消耗为n*c1+(n-1)*c2+(n-1)*c3+(n-1)*c4+c5*Σ(i-1)+c6*Σ(i-1)+c7*Σ(i-1)+c8*(n-1)=n*c1+(n-1)*(c2+c3+c4+c8)+(n-1)n/2*(c5+c6+c7),即a*n^2+bn+c~O(n^2)
一般以最差情况下的运行时间为整个算法运行时间的上限。即使平均情况下,时间与最差也是同一个等级。