演算法學習之路 三種插入排序

2021-06-29 14:11:11 字數 1095 閱讀 3467

插入排序:有乙個已經有序的資料序列,要求在這個已經排好的資料序列中插入乙個數,但要求插入後此資料序列仍然有序,這個時候就要用到一種新的排序方法。

插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的。

插入排序細分可以分為三種:

簡單插入排序:

思路簡單直接上關鍵部分**。

一直int陣列a,下同。

for (int i = 1; i < a.length; i++) 

a[index + 1] = temp;

}

簡單插入排序是穩定的排序,平均時間複雜度是o(n^2)。當陣列a接近正序的時候時間複雜度為o(n),接近逆序的時候時間複雜度為o(n^2)。

二分插入排序:在當前位置找正確位置的時候採用折半法。

關鍵**如下:

for (int i = 1; i < a.length; i++)  else 

}for (int j = i - 1; j >= low; j--)

if (low != i)

}

二分插入排序為穩定的排序,比較次數有陣列內部是否正序無關。移動次數與簡單插入排序相同。最壞為o(n^2/2),最好為o(n),平均移動次數為o(n^2)

希爾排序(shell排序)

:基本思想:先取乙個小於n的整數d1作為第乙個增量,把檔案的全部記錄分成d1個組。所有距離為d1的倍數的記錄放在同乙個組中。先在各組內進行直接插入排序;然後,取第二個增量d2

關鍵**如下

int d = a.length;

while (d != 1)

a[index + d] = temp;}}

}

希爾排序是不穩定的排序。效能優於簡單插入排序,平均時間複雜度為o(nlogn)

插入排序演算法學習

插入排序就如同手裡放了一堆紙牌,把紙牌從左到右進行排序。insert sort a for j 2 to n n為陣列a的長度 do key a j insert a j into the sorted sequence a 1.j 1 i j 1 while i 0 and a i key do ...

演算法學習 插入排序

插入排序 insertion sort 的演算法描述是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入 實現 public static void insertsort int array if array.length 0 r...

演算法學習 插入排序

演算法介紹 插入排序 insertion sort 是一種簡單直觀且穩定的排序演算法。如果有乙個已經有序的資料序列,要求在這個已經排好的資料序列中插入乙個數,但要求插入後此資料序列仍然有序,這個時候就要用到一種新的排序方法 插入排序法,插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,從...