java簡單排序算法之插入排序

插入排序

簡介

	插入排序的算法描述是一種簡單直觀的排序算法。它的工作原理是通過構建有序序
	列,對於未排序數據,在已排序的序列中從後向前掃描,找到相依的插入位置。插
	入排序在實現上,通常採用in-place排序(即只需用到O(1)的額外空間的排序),
	因而再從後像前掃描的過程中,需要反覆把已排序的元素逐步向後挪位,爲最新的
	元素提供插入空間。

描述過程

	1.從第一個元素開始,該元素可以認爲已經被排序。
	2.取出下一個元素,在已排序的元素序列中從後向前掃描。
	3.如果該元素(寶庫已排序)大於新的元素,該元素移動到下一個位置。
	4.重複第3步,直到找到已排序的元素小於或者等於新元素的位置。
	5.將新元素插入到該位置後,重複2~5步。

演示圖

第一步:默認是第一個數已排序

在這裏插入圖片描述

第二步 44比3大就默認已排序到第二的位置

在這裏插入圖片描述

第三步 取出38從後向前對比

在這裏插入圖片描述

第四步:從後向前對比,放入第2個位置

在這裏插入圖片描述

第5步:依次類推

在這裏插入圖片描述

大白話理解

	一個數組中,默認第一個元素已經被排序了。取出第二個元素跟第一個元素比較大
	小。大的就原地插入,小就向前插入。取出第三個元素從後向前依次比較。比第二
	元素小就繼續跟第一個元素比較。比第二元素大就原地插入。依次類推,直到所有
	元素比較完,排序就完成了。

代碼演示

/**
 *  插入排序
 * @author Mr.qian
 */
public class InsertSort {
	
	public static void main(String[] args) {
		int[] arr = {8,1,9,2,7,4,5,3,6};
		sort(arr);
	}
	
	public static void sort(int[] arr) {
		//1.判空
		if(arr == null || arr.length <= 1) {
			return ;
		}
		//2.設置當前元素
		int current;                                                   
		for(int i = 0; i < arr.length -1; i++) {                            
			current =  arr[i+1]; // 當前元素下標;                         
			int preIndex = i;    // 上一元素下標;                                              
			//3.如果當前元素小於上一個元素
			while(preIndex >= 0 && current < arr[preIndex]) {            
				//需要將上一個元素下標進行下移
				arr[preIndex+1] = arr[preIndex];                        
				//4 .保證從後向前完全遍歷比較											
				preIndex --;                                               
			}
			
			arr[preIndex +1] = current;                               
		}
		System.out.println(Arrays.toString(arr));
	}
}

結論

插入排序
平均時間複雜度 O(n²)
最好情況 O(n)
最壞情況 O(n²)
空間複雜度 O(1)
排序方式 In-place (內排序)
穩定性 Y
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章