說明:以下c++**的實現參考嚴蔚敏的《資料結構(c語言版)》
實驗目的:有序列,,,,,,,};其中把a視為key,按照key的大小使用插入排序對序列進行排序
演算法圖示:
實驗**:
c10_1.cpp
#ifndef c10_1_h
#define c10_1_h
#include using namespace std;
#define maxsize 20
typedef int keytype;
typedef int infotype;
typedef struct
redtype;
typedef struct
sqlist;//連續的儲存空間儲存排序資料
演算法複雜度分析:
對於插入排序,如果含n個數的序列已經按從小到大排列好了,根據程式的實現可知程式只進行了n-1次資料比較和0次資料移動結束了程式的執行。當這個序列是從大到小排列時,程式執行時間最長,需要進行(n-1)(n+2)/2(即1+2+...+n-1+n-1)次資料比較,還需要進行(n-1)(n+4)/2(即
2+3+...+n-1+n+n-1)次資料移動。由以上分析,(n-1+0+(n-1)(n+2)/2+(n-1)(n+4)/2
)/2=(n-1)(n+4)/2,所以演算法複雜度為o(n*n)
插入排序演算法高階
將有監督的插入排序,優化為無監督的插入排序,尋找全域性最小值並將其放到開頭,所以j不可能 0,固可去掉監督項j 0。由於原來的j 0的判斷的時間複雜度為n 2階,經優化後時間複雜度為n階,時間效率有所提高,這一點從程式的執行結果也可以看出。import time li1 i for i in ran...
演算法基礎 插入排序高階之希爾排序
我們分割待排序記錄的目的是減少待排序記錄的個數,並使整個序列向基本有序發展。而如上面這樣分完組後,就各自排序的方法達不到我們的要求。因此,我們需要採取跳躍分割的策略 將相距某個 增量 的記錄組成乙個子串行,這樣才能保證在子串行內分別進行直接插入排序後得到的結果是基本有序而不是區域性有序。初始時,有乙...
插入排序演算法
插入排序演算法 思想 把排序過程看作是序列單個有序擴充套件為整體有序的過程,即首先取序列第二個元素與第乙個元素比較,將其插入合適位置,再將第三個元素與前兩個元素比較,將其插入合適位置,如此進行,直到最後取第n個元素與前n 1個元素進行比較並將其插入合適位置。演算法 建立日期 2004 12 14 插...