插入排序之直接插入排序
阿新 • • 發佈:2018-12-11
插入排序分為兩種:直接插入排序、希爾排序
一、直接插入排序
插入排序(英語:Insertion Sort)是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃描,找到相應位置並插入。插入排序在實現上,通常採用in-place排序(O(1)的額外空間的排序),因而在從後向前掃描過程中,需要反覆把已排序元素逐步向後挪位,為最新元素提供插入空間。
演算法描述:
1、首先認為第一個元素已經被排序。
2、拿出第二個元素(temp),從已經排序的陣列從後向前掃描前面資料。
3、temp依次與前面的資料比較,如果temp小於前面的資料,則將該資料向後移動一個位置。
4、重複步驟3,直到找到temp大於或者等於前面的資料(已經排序)。
5、將temp插入改位置。
6、重複2—5
動畫演示:
程式碼(java):
public static void insertSort(int[] arr) { for (int i = 1; i < arr.length; i++) { int temp = arr[i];//步驟2 取出下一個元素,在已經排序的元素序列中從後向前掃描 for (int j = i; j >= 0; j--) { //步驟3 temp依次與前面的資料比較,如果temp小於前面的資料,則將該資料向後移動一個位置 if (arr[j - 1] > temp && j > 0) { arr[j] = arr[j - 1]; } //步驟5 將temp插入改位置。 arr[j] = temp; } } }
總結:
插入排序演算法複雜度平均為:O(n^2),所以不適合用於資料量很大的排序應用。
如果比較操作的代價比交換操作大的話,可以採用二分查詢法來減少比較操作的數目。該演算法可以認為是插入排序的一個變種,稱為二分查詢插入排序。