插入排序 直接插入排序和shell排序

2021-08-17 17:38:03 字數 1028 閱讀 3651

1. 排序的分類

2. 直接插入排序

(1)演算法思想:

直接插入排序是一種簡單的排序演算法,將第乙個元素看作有序子串行,從第二個元素開始,和前乙個元素比較,若小於,將前乙個元素向後移,將第二個元素插入到有序子串行中;若大於,直接將第二個元素插入到有序子串行中。按這種過程繼續下去,直到完成所有的有序子串行。

(2)基本實現:

void insertsort(datatype arr, int sz)

for (int j = i - 1; j >= left; --j)

arr[left] = key; }

}

(3)演算法效能:

時間複雜度:o (n^2)

空間複雜度:o (1)

穩定性:穩定

4. shell 排序

(1)演算法思想:

shell (希爾)排序是在直接插入排序上的改進。是先將整個待排序的序列按照一定的規則(或者利用gap=gap/3+1,或者指定增量序列increase)劃分成若個子序列,對每個子串行進行直接插入排序,等到整個序列基本有序時,在對全體資料進行一次直接插入排序。

(2)基本實現:

void shellsort(datatype * arr, int sz)

while (gap>0)

arr[j + gap] = key;

} gap = gap / 3;

}}

(3)演算法效能:

時間複雜度:o(n^1.5)

空間複雜度:o (1)

穩定性:不穩定

插入排序 直接插入排序

直接插入排序演算法思想 將整個資料表分成左右兩個子表,其中左子表為有序表,右子表為無序表 整個排序過程就是將右子表中的元素逐個插入到左子表中,直到右子表為空,而左子表成為新的有序表。演算法過程分析 將待排序的元素存放在陣列r n 1 中,在初始狀態下,r 0 為監視哨,r 1 為有序區,r 2 r ...

插入排序 直接插入排序

一.插入排序的基本思想 將乙個記錄插入已排序好的有序表中,從而得到乙個新的記錄數加1的有序表。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。所謂的哨兵,就是即將插入的記錄。二.示例 如果碰見相等的元素,會被插到後面,所以,相等元素的前後順序沒有改變,插入排序是穩定的。三.演算法實現 public ...

插入排序 直接插入排序

直接插入排序的基本思想 將乙個記錄插入到已排序好的有序表中,然後得到乙個新記錄數增1的有序表。也就是 先將序列的第1個記錄看成是乙個有序的子串行,然後從第2個記錄逐個進行插入,直至整個序列有序為止。如果碰見乙個和插入元素相等的,那麼插入元素把想插入的元素放在相等元素的後面。所以,相等元素的前後順序沒...