第八章数据结构小结

一、插入排序

       直接插入排序:     一 一比对

  折半插入排序:在已经拍好的序列中插入,适合初始记录无序、n较大的情况


 

直接插入排序代码实现

 1 void InsertSort(SqList &L){
 2 //对顺序表L做直接插入排序
 3 for(i=2;i<=L.length;++i)
 4  if(L.r[i].key<L.r[i-1].key)//若小于,需将r[i]插入有序子表 
 5  {
 6      L.r[0]=L.r[i]; //将待插入的记录暂存到监视哨中 
 7      L.r[i]=L.r[i-1];//r[i-1]后移 
 8      for(j=i-2;L.r[0].key<L.r[j].key;--j)//从后向前寻找插入位置 
 9      {
10          L.r[j+1]=L.r[j];//记录逐个后移 
11          L.r[j+1]=L.r[0];  
12      }
13  }
14 }

 

 

 

二、交换排序

       冒泡排序:左右一 一比对

       快速排序:选一个作为分隔,对其进行左右两端分隔,然后利用递归,一 一划分

三、选择排序

       简单选择排序/直接选择排序:以第一个数进行比较,然后找到里面最小的那一个数后,调换位置,紧接着第二个数开始(还是可以用循环)

void SelectSort(SqList &L)
{
    for(int i=1 ; i<L.length ; ++i)
    {
        k = i ;
        for(int j=i+1 ; j<=L.length ; ++j)
        {//选择关键字最小的记录
            if(L.r[j].key < L.r[k].key)
            {
                k = j ; //k指向此趟排序中关键字最小的记录
             }
        }
         if(k != i)
         {//交换r[i]与r[k]
             t = L.r[i] ; L.r[i] = L.r[k] ;L.r[k] = t ;
          }
     }
}

 

  树形选择排序:从树的叶子到根,两两比较,换位

  堆排序:调整堆、建初堆(筛选法)

四、归并排序

       将两个或两个以上的有序表合成一个有序表

posted @ 2020-07-12 15:21  刘丁铭  阅读(173)  评论(0编辑  收藏  举报