三 插入排序

2021-10-10 00:27:01 字數 1382 閱讀 1439

我們打牌的時候,拿到的牌經常是需要進行排序操作的,一般是一張一張的來,將每一張牌插入到其他有序的牌中的適當位置。基於這種思想,就有了插入演算法——通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。

將第一待排序序列第乙個元素看做乙個有序序列,把第二個元素到最後乙個元素當成是未排序序列。從頭到尾依次掃瞄未排序序列,將掃瞄到的每個元素插入有序序列的適當位置。(如果待插入的元素與有序序列中的某個元素相等,則將待插入元素插入到相等元素的後面。)

sort 方法的邏輯是——在 i 向後遍歷的時候,構建乙個迴圈向前遍歷,將 a[i] (初始狀態 j = i)以及前面的所有元素相鄰兩位元素兩兩進行比較,如果大小不符合規則,相鄰元素之間調換位置。

/**

* 插入排序

*/public

class

insertion}}

private

static

boolean

less

(comparable v,comparable w)

private

static

void

exchange

(comparable[

] a,

int i,

int j)

private

static

void

show

(comparable[

] a)

system.out.

println()

;}/** * 測試陣列元素是否有序

* @param a

* @return

*/public

static

boolean

issorted

(comparable[

] a)

}return

true;}

}

所需的時間取決於輸入中元素的初始順序。例如,對乙個很大且其中的元素已經有序(或接近有序)的陣列進行排序會比對隨機順序的陣列或者是逆序陣列進行排序要快得多。

時間複雜度:如果是最差的情況,即陣列為逆序排列,對於 n 個元素,首先外層 for 迴圈要迴圈 n-1 次,內層 for 迴圈的迴圈次數是根據 i 來決定的,i = 1時,迴圈 1 次,i = 2,迴圈 2 次,…,i = n-1,迴圈 n-1 次,綜合兩層迴圈,保留高階項,並去掉係數,那麼時間複雜度為o(n^2)。

空間複雜度:只是用了2個迴圈變數以及1到2個標誌和交換等的中間變數,這個與待排序的記錄個數無關,空間複雜度為 o(1)。

穩定性:在比較的時候,如果兩個數相等的話,不會進行移動,前後兩個數的次序不會發生改變。例如 3885 ,當後面的8與前面進行比較的時候,由於並不小於8,所以依然保持不動。

三 插入排序

插入排序 和打撲克牌,抓牌的過程是一樣的。大致就是這麼個意思,圖畫的不好,請擔待。圖上描述的是插入的過程,那麼他怎麼知道,乙個乙個的和前面的作比較,比前邊的數字小就交換,一直交換到正確的位置。package bubbling 插入排序 author zy 劉會發 version 1.0 since ...

排序演算法(三)插入排序

今天來更新排序演算法中的第三種演算法 插入排序插入排序是基於比較的排序。所謂的基於比較,就是通過比較陣列中的元素,看誰大誰小,根據結果來調整元素的位置 因此,對於這類排序,就有兩種基本的操作 比較操作 交換操作其中,對於交換操作,可以優化成移動操作,即不直接進行兩個元素的交換,還是用乙個樞軸元素 t...

排序演算法(三) 插入排序

一 直接插入排序 最差時間複雜度 o n 2 最優時間複雜度 o n 平均時間複雜度 o n 2 穩定性 穩定 直接插入排序 insertion sort 是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對未排序的資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。插入排序演算法的一般...