8 3 直接插入排序

2022-08-01 04:30:23 字數 1095 閱讀 8187

就如同拿到一摞亂撲克牌時候要在手裡將順序整理好一樣,直接插入排序(straight insertion sort)的基本操作是將乙個記錄插入到已經排好序的有序表中,從而得到乙個新的、記錄數增1的有序表。

複雜度分析:

從空間來看,它需要乙個記錄的輔助空間o(n)(其實不需要也可以,直接在原陣列中進行滑動操作,將目前要執行的元素current向前滑動到它對應的位置,此時不需要額外空間即o(1)),因此關鍵是看它的時間複雜度。當最好的情況,也就是要排序的表本身就是有序的,我們就相當於遍歷了一遍陣列,只是執行了大迴圈,內部小迴圈一直都未進行,而如果是最壞的情況,即排序表示逆序的,此時需要比較的次數就是 n * (n + 1)/2,需要移動的次數也是這些。如果排序記錄是隨機的,那麼根據概率性相同的原則,平均比較和移動的次數約為 n * n / 4次。因此我們得出直接插入排序法的時間複雜度為o(n*n)。從這裡可以看出,同樣的o(n*n)的時間複雜度,直接插入排序法比冒泡法和簡單選擇排序法的效能要好一些。

下面看一下用php實現的該演算法:

<?php

header("content-type:text/html;charset=utf-8");

/** 插入法排序:

* 每乙個位置的值向前滑動,挨個與它之前的值進行比較,插到合適的位置

* 時間複雜度:與資料情況有關

* 最好的情況:o(n);

* 最差的情況:o(n^2)

* 額外空間複雜度o(1)

* */

function insertsort($arr

)

for($current=1;$current

}return

$arr;}

function swap(&$arr,$i,$j)

$arr = [2,33,45,22,64,67,12,1,0,9];

$array = insertsort($arr

);print_r($array);//

結果:array ( [0] => 0 [1] => 1 [2] => 2 [3] => 9 [4] => 12 [5] => 22 [6] => 33 [7] => 45 [8] => 64 [9] => 67 )

直接插入排序

直接插入排序是一種最簡單的排序方法,它的基本思想是依次將每個記錄插入到乙個有序中去。就是說,第i i 1 遍整理時,a1,a2,ai 1已經是排好序的子串行 取出第i個元素ai,在已排好序的子串行為ai找到乙個合適的位置,並將它插到該位置上。易知上述排序當i 1時實際上為空操作,故可直接從i 2開始...

直接插入排序

直接插入排序的演算法思想 直接插入排序 straight insertion sort 的基本操作是將乙個記錄插入到已經排好序的有序表中,從而得到乙個新的 記錄數增 1 的有序表。根據該思想,編寫 如下 從已有序列的第0個記錄開始比較 public static void insertsort1 i...

直接插入排序

源文章url http student.zjzk.cn course ware data structure web paixu paixu8.2.1.1.htm 做過部分修改。1 基本思想 假設待排序的記錄存放在陣列r 1.n 中。初始時,r 1 自成1個有序區,無序區為r 2.n 從i 2起直至...