【笔记】插入排序

来源:互联网 发布:access2000数据库修复 编辑:程序博客网 时间:2024/06/18 08:00

  • 直接插入排序

  插入排序的算法思想:将待排序元素分为已排序子集和未排序子集,一次从未排序子集中的一个元素插入已排序子集中,使已排序自己仍然有序;重复执行以上过程,指导所有元素都有序为止。
  

1.直接插入排序

  直接插入排序是一种最简单的插入排序算法。基本算法思想:把被排序的记录逐个取出,插在适当的位置。即进行第i遍整理时,前i-1个记录A[1],A[2],…,A[i-1],已经排序顺序;取出第i个记录A[i],在整理好的序列中为A[i]找到一个合适的位置j,即A[1],A[2],…,A[j-1]的关键字都小于或等于A[i]的关键字,而A[j],…,A[i-1]中的关键字都大于A[i]的关键字;将从j开始到位置i-1的记录全部后移一步;将原来A[i]中的数据插在A[j];于是,A[1],A[2],…,A[i]仍然是排好顺序的。
  例如给定一个含有8个元素的元素,对应的关键字序列为(45,23,56,12,97,76,29,68),将这些元素按照关键字从小到大进行直接插入排序的过程如下图所示。

![这里写图片描述](http://img.blog.csdn.net/20171103004249801?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2J3ZW0=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)  相应地,直接插入排序算法为:
void InsertSort(SqList *L)/*直接插入排序*/{    int i,j;    DataType t;    for(i=1;i<L->length;i++)        /*前i个元素已经有序,从第i+1个元素开始与前i个有序的关键字比较*/    {        t=L->data[i+1];             /*取出第i+1个元素,即待排序的元素*/        j=i;        while(j>0&&t.key<L->data[j].key)/*寻找当前元素的合适位置*/        {            L->data[j+1]=L->data[j];            j--;        }        L->data[j+1]=t;             /*将当前元素插入合适的位置*/    }}

  
  

  
  

  
  

  
  
  

  
  
  
  

原创粉丝点击