插入排序

今天复习了一下数据结构的插入排序,下面是算法和自己的一些理解

void charu(int *a,int length)
{
 int i,j,t;
 for( i=1;i<length;i++)//将第一个数子看为有序的数组,从第二个数开始依次插入
 {
  t=a[i];//将要插入的数记录下来,防止前面的数后移而丢失
  if(a[i]<a[i-1])//判断下一个要插入的数是否大于它的前一个数,如果大于的话,则不必执行for循环,因为前面的都已有序
  {
      for( j=i-1;t<a[j];j--)//让数组下标指向要插入数(t)的前一个数,如果前一个数逆序(即前一个数比要插入的数大),则让前一个数后移一位,数组下标继续向前,直到退出循环,此时的话,前一个数小于要插入的数,后一个数大于要插入的数,此时的位置便是要插入的位置
      {
       a[j+1]=a[j];//数组后移
      }
      a[j+1]=t;//将t插入要插入的位置,因为最后一部j已经减1,所以j+1才是要插入的位置
  }
 }
}

posted @ 2014-05-29 20:14  runninglzw  阅读(225)  评论(0编辑  收藏  举报