for(int i=1;i此為外層迴圈,固定執行n-1次
在指定索引位置插入乙個資料,需要【從資料尾部】開始依次向後移動一位直到到達索引位置:
int data=l[i];//用來儲存要插入的資料
for(int j=i;((isup && l[j - 1] > data) || (!isup && l[j - 1] < data))&& j >0;j--)
//該邏輯表示乙個選擇器,可以通過改變bool isup的值來改變結果的公升降序
l[j] = l[j - 1];
l[j] = data;
內層迴圈的次數是不固定的(0次-j次),這是插入排序優勢的關鍵。
最壞的情況(逆序):
內層迴圈執行 j 次,總共需要(n-1)^2/2次比較和移動
時間複雜度為t(n^2)
最好的情況(順序):
內層迴圈只執行了一次判斷,而且沒有移動資料,所以總共執行了n-1次比較,0次移動
時間複雜度為t(n)
基本有序的情況(資料折線圖整體為公升序或者是降序):
根據有序度,我們只需要進行較少的比較和移動 ,時間複雜度在t(n)---t(n^2)之間。
時間複雜度:t(n)---t(n^2)//有序度來決定的
空間複雜度:o(1)
//整體**
public static void insertsort(ref int l,int datacount,bool isup)
}
排序系列之 直接插入排序
排序 直接插入排序.cpp 定義控制台應用程式的入口點。include stdafx.h include 用於呼叫隨機種子函式 include include include using namespace std 說明 c 實現直接插入排序 直接插入排序思想 如我們打牌一樣,一開始手上一張牌都沒有...
插入排序之直接插入排序
插入排序概述 有乙個已經有序的資料序列,要求在這個已經排好的資料序列中插入乙個數,但要求插入後此資料序列仍然有序,這個時候就要用到一種新的排序方法 插入排序法,插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的 個數加一的有序資料,演算法適用於少量資料的排序,時間複雜度為...
插入排序之直接插入排序
依次將每個記錄 無序表 插入到乙個已排好序的有序表中,得到乙個新的,記錄增加1的有序表 向撲克牌中插入新牌,圖書館整理圖書 有n個數,將第乙個數看做乙個有序表,從第二個開始從後向前比較,第一趟比較前兩個數,然後把第二個數按大小插入到有序表中 第二趟把第三個資料與前兩個數從後向前掃瞄,把第三個數按大小...