第八章資料結構小結
阿新 • • 發佈:2020-07-12
一、插入排序
直接插入排序: 一 一比對
折半插入排序:在已經拍好的序列中插入,適合初始記錄無序、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 ; } } }
樹形選擇排序:從樹的葉子到根,兩兩比較,換位
堆排序:調整堆、建初堆(篩選法)
四、歸併排序
將兩個或兩個以上的有序表合成一個有序表