直接插入排序是將元素按順序插入已經排好序的序列中。對於待插入的元素,如果比最後乙個元素還大,則不用處理。否則,從後邊元素開始比較,並順次後移,直到碰到元素小於或者等於該元素。
設定第乙個元素位置為哨兵,用來存放待插入元素。
#include #include #include using namespace std;
#define maxn 20
typedef struct sqlist
sqlist;
void initsqlist(sqlist &l,int n)
l.length = n;
}void insertsort(sqlist &l)
}void printsqlist(sqlist l)
可以發現,當序列基本有序時,直接插入排序要處理的元素就大大減少,效率就會很高。希爾排序就利用了這一特點。
希爾排序的思想是將待排序列分割為小的子串行,分別進行直接插入排序,當整個序列基本有序時,對整體進行一次直接插入排序。當然,子串行是通過增量劃分出來的,相隔某個增量的元素屬於乙個子串行。排序時,增量逐漸減小。
//dk為增量
void shellinsert(sqlist &l,int dk)
}//d為增量序列
void shellsort(sqlist &l,int d,int t)
插入排序(直接插入 希爾)
排序策略 在有序表的恰當處插入乙個新元素,並保持該有序表的有序性 即,當插入第n個元素時,前n 1個元素已經是有序排列 排序過程 以集合中資料為例 初始儲存 第一趟 插入38 第二趟 插入65 第三趟 插入97 第四趟 插入76 第五趟 插入13 第六趟 插入27 第七趟 插入49 一共有八個資料,...
插入排序(直接插入排序 希爾排序)
直接插入排序 基本思想 假設待排序的數存放在陣列arr 1.n 中。初始時,arr 1 自成1個有序區,無序區為arr 2.n 從i 2起直至i n為止,依次將arr i 插入當前的有序區arr 1.i 1 中,生成含n個記錄的有序區。演算法複雜度 對於具有n個記錄的檔案,要進行n 1次排序 各種狀...
插入排序 直接插入排序 希爾排序
1.直接插入排序 兩個陣列,有序陣列和無序陣列。排序前 無序陣列裡面所有的值都是無序的,有序陣列沒有值 排序中 無序陣列中拿出乙個數,放到有序陣列當中,有序陣列拿到數,將其按照大小有序的插入到無序陣列中 排序後 無序陣列中沒有數,有序陣列中的數為有序的。假設有一組無序序列 r0,r1,rn 1。1 ...