插入排序——直接插入排序

一、直接插入排序

直接插入排序的基本思想是:將一個記錄插入到已排好序的有序表中,從而得到一個新的有序表。

設數組爲a[0…n-1]。

1. 初始時,a[0]自成1個有序區,無序區爲a[1..n-1]。令i=1

2. 將a[i]併入當前的有序區a[0…i-1]中形成a[0…i]的有序區間。

3. i++並重復第二步直到i==n-1。排序完成。

java實現

public void  insertSort(int array[]) {
		int i,j;
		for(i=1;i<array.length;i++) {
			//a[i]>a[i-1]表示a[0..i]是有序的,無需調整
			//否則令j=i-1,temp=a[i]。然後一邊將數據a[j]向後移動一邊向前搜索,當有數據a[j]<a[i]時停止並將temp放到a[j + 1]處。
			if(array[i]<array[i-1]) {
				int temp=array[i];
				for(j=i-1;j>=0&&array[j]>temp;j--) {
					array[j+1]=array[j];
				}
				array[j+1]=temp;
			}
		}
//再對將a[j]插入到前面a[0…j-1]的有序區間所用的方法進行改寫,用數據交換代替數據後移。
	//如果a[j]前一個數據a[j-1] > a[j],就交換a[j]和a[j-1],再j--直到a[j-1] <= a[j]。
	public static void insertSort2(int array[]) {
		int i,j;
		for(i=1;i<array.length;i++) {
			for(j=i-1;j>=0&&array[j+1]<array[j];j--) {
				int temp=array[j+1];
				array[j+1]=array[j];
				array[j]=temp;
			}
		}
	}


複雜度分析:

對於n個記錄的文件,要進行n-1趟排序。

各種狀態下時間複雜度爲:



空間複雜度爲o(1)

是穩定的排序算法。


發佈了34 篇原創文章 · 獲贊 4 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章