进来深陷数据结构的困扰啊,今天上午偶然看了插入排序,看了好几种算法,偶有小体会,写之于此!
1.直接插入排序
直接插入排序是一种简单的排序方法,几乎不用思考算法,很容易就能实现,当然,你脑子偷懒的代价就是这个代码效率很低,当然在数据很少的时候,是没有任何问题的,但是,即便如此,还是有一些可以探究的东西。我看过两个版本的代码,当然几乎没有区别,
templatevoid simpleInsertSort(T a[],int size){ int k; T tmp; for(int j=1;j =0;k--) a[k+1]=a[k]; a[k+1]=tmp; }}
这是一个版本的,还有另外一个版本:
void InsertSort(int *a,int length){ int i,j; for(i=1;i=0;j--) { if(key>a[j]) break; else { a[j+1]=a[j]; a[j]=key; } } }}
显然从整个来讲,从数组或是指针实现都是可以的,但是我们可以看到在内层循环里面,两者有细微的区别,前者并没有a[j]=key这样一条语句,我们来看,事实上,当我们跳出循环时得到的k+1,就是此时应该插入的位置,所以a[j]=key这样一条语句,虽然便于理解,但是浪费了时间,当然在数据量很少的时候,这样并没有区别,这是第一种算法的体会!