1. 程式人生 > >插入排序之直接插入排序

插入排序之直接插入排序

插入排序分為兩種:直接插入排序、希爾排序

一、直接插入排序

插入排序(英語: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),所以不適合用於資料量很大的排序應用。

如果比較操作的代價比交換操作大的話,可以採用二分查詢法來減少比較操作的數目。該演算法可以認為是插入排序的一個變種,稱為二分查詢插入排序