排序的概念:將乙個無序的序列排列成乙個有序的序列
按儲存介質可乙個分為
1.內部排序:資料量不大,資料在記憶體,無需內外存交換資料。
2.外部排序:資料量較大,資料在外存,(檔案排序)
按比較器個數可分為
1.序列排序:單處理機(同時比較一對元素)
2.並行排序:多處理機(同時比較多對元素)
按主要操作可分為
1.比較排序:用比較的方法
例如:插入排序,交換排序,選擇排序,歸併排序
2.基數排序:不比較元素的大小,根據元素本身的取值確定其有序的位置
儲存結構—記錄序列以資料表儲存
#define maxsize 20 //設記錄不超過20個
typedef int keytype; //設定關鍵字為int 整型
typedef structredtype.;
typedef structsqlist.;
基本思想:即邊插入邊排序,保證子串行隨時都是排好序的
直接插入法–使用 『哨兵』
記錄指標後移,尋找可以插入的位置
插入到正確的位置
然後,重複上述操作
**演算法
void
insertsort
(sqlist &l)
l.r[j+1]
=l.r[o]
;//插入到正確位置}}
}
折半插入排序
折半查詢示意圖,並且也是建立在有序的基礎之上。
void
binsertsort
(sqlist &l)
//迴圈結束,high+1 為插入位置
for(j=i-
1;j>=high+1;
--j)
l.r[j+1]
=l.r[j]
;//移動元素,
l.r[high+1]
=l.r[0]
;//插入到正確的位置
}}
希爾排序
基本思想
先將待排序列分割為若干個子串行,分別進行直接插入排序,待整個記錄中的序列「基本有序時」,然後在對整體進行直接插入排序。
特點1,縮小增量
2,多遍插入排序
希爾排序的思路**
希爾排序演算法(其中某一趟的排序操作)
void
shellinsert
(sqllist &l ,
int dk)
}}
總結
資料結構 C語言版 折半插入排序
折半插入排序是對直接插入排序的優化,折半插入排序所需附加儲存空間和直接插入排序相同,從時間上比較,折半插入排序僅減少了關鍵字間的比較次數,而記錄的移動次數不變。因此,折半插入排序的時間複雜度仍為o n2 直接插入排序可參考 此處以資料2的排序為例,用i從左到右遍歷到下標為5的位置,發現此處的值2小於...
插入排序(c語言版)
插入排序 insertion sort 的基本思想 每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排序好的序列中,直到全部記錄插入完成為止.假設待排序的記錄存放在陣列r 1.n 中。初始時,r 1 自成1個有序區,無序區為r 2.n 從i 2起直到i n 為止,依次將r i 插入當前的有序區r...
資料結構與演算法(C語言版) 插入排序
低階排序演算法 氣泡排序,選擇排序,插入排序 高階排序演算法 歸併排序,堆排序,快速排序 插入排序就是在已經排序的資料中從大往小比較,出現比該數小的就插入到該位置後面。include using namespace std void insertionsort int a,int n int mai...