插入排序 直接插入排序 二分插入排序 希爾排序

2021-08-14 23:54:14 字數 1009 閱讀 3385

選擇排序是一種較為簡單的排序演算法。它的實現原理是每一次從待排序的資料元素中挑出乙個最小(大)的元素,存放在資料的起始(末尾)位置,直到所有待排序的資料排完。

直接插入排序:

當插入第i個元素的時候,我們認為它前面的i個元素已序。

這時候用array[i]的排序嗎與前面的排序碼進行比較,找到適合的位置就進行插入,原來位置上的元素按順序向後移動。

時間複雜度:     最差:和所需要的序列相反 o(n^2)

最優:和所需要的系列相同 o(n)

空間複雜度:o(1)

穩定性:不穩定

**如下:

void insertsort(int *array, int size)

array[end+1] = key;

}}

二分插入排序:

在插入排序中,如果比較操作的代價大於資料交換的代價時,這時候二分查詢的作用就很明顯了。通過二分查詢,我們可以減少比較操作的次數。

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

最優:n o(lgn)

空間複雜度:o(1)

穩定性:穩定

void binarysort(int *array, int size)

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

當資料量較多的時候,二分插入排序可以很大程度上的減少資料的比較次數。但是當資料接近有序時,直接插入排序就要優於二分插入排序。

希爾排序:

希爾排序較之直接插入排序效率高在:直接插入排序每次只能移動乙個資料,而希爾排序每次可以移動增量數個資料。排序的時間複雜度大幅度提高。

void shellsort(int *array, int size)

break;}}

}

排序演算法 插入排序(直接插入,二分插入,希爾)

第乙個數預設有序。從第二個數開始,從後往前掃瞄。若取出數 當前數,則指標不斷前移,直到取出數 當前數時,把取出數插入到當前位置。public static int insertsort int arr arr pre 1 cur return arr 以下過程具體說明了兩個數是怎麼實現有序的 pre...

插入排序 直接插入排序

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

插入排序 直接插入排序

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