1. 程式人生 > 實用技巧 >第八章資料結構小結

第八章資料結構小結

一、插入排序

直接插入排序: 一 一比對

  折半插入排序:在已經拍好的序列中插入,適合初始記錄無序、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 ; } } }

  樹形選擇排序:從樹的葉子到根,兩兩比較,換位

  堆排序:調整堆、建初堆(篩選法)

四、歸併排序

將兩個或兩個以上的有序表合成一個有序表