直接插入排序,是一種最簡單也是最直觀的插入排序演算法。直接插入排序演算法適用於基本有序的排序表和資料量不大的排序表
其思想是:
假設陣列由有序部分和無序部分組成,前半部分為有序,後半部分為無序,假設有表 l [ n ],在某一狀態存在如圖所示:
則此時,需要將 l [ i ] 插入到陣列的有序部分,演算法為:將 l [ 0 ] 設為哨兵,從 i - 1 開始向前逐個查詢,並同時交換陣列元素,最終找到插入位置時,將元素插入。
演算法儲存結構適用性:直接插入排序適用於順序儲存結構和鏈式儲存結構,順序儲存結構,是隨機訪問,使得倒著訪問成為可能,而鏈式儲存結構,如果是單鏈表的話,則需要從前向後查詢,如果為雙向鍊錶的話,則與順序儲存結構無異,唯一的不同,是注意指標
演算法實現
/*
直接插入排序:
時間複雜度->最好情況:o(n)、平均情況:o(n^2)、最壞情況:o(n^2)
空間複雜度->o(1)
是否穩定:是
複雜性:簡單
*/#includeusing namespace std;
typedef structelemtype;//定義型別
void insertsort(elemtype a,int n)
a[j+1]=a[0];}}
}int main(),,,,,};
insertsort(a,5);
for(int j=1;j<=5;j++)
return 0;
}
插入排序 直接插入排序
直接插入排序演算法思想 將整個資料表分成左右兩個子表,其中左子表為有序表,右子表為無序表 整個排序過程就是將右子表中的元素逐個插入到左子表中,直到右子表為空,而左子表成為新的有序表。演算法過程分析 將待排序的元素存放在陣列r n 1 中,在初始狀態下,r 0 為監視哨,r 1 為有序區,r 2 r ...
插入排序 直接插入排序
一.插入排序的基本思想 將乙個記錄插入已排序好的有序表中,從而得到乙個新的記錄數加1的有序表。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。所謂的哨兵,就是即將插入的記錄。二.示例 如果碰見相等的元素,會被插到後面,所以,相等元素的前後順序沒有改變,插入排序是穩定的。三.演算法實現 public ...
插入排序 直接插入排序
直接插入排序的基本思想 將乙個記錄插入到已排序好的有序表中,然後得到乙個新記錄數增1的有序表。也就是 先將序列的第1個記錄看成是乙個有序的子串行,然後從第2個記錄逐個進行插入,直至整個序列有序為止。如果碰見乙個和插入元素相等的,那麼插入元素把想插入的元素放在相等元素的後面。所以,相等元素的前後順序沒...