Java數據結構與算法之插入排序

前言

排序算法可以分爲基本排序算法和高級排序算法,如果從基本算法裏找出性能最好的算法,那麼插入排序算是不二之選了.他的時間複雜度T(n2),但是要比冒泡和選擇排序都要快一點.他的實現類似於QQ鬥地主中抓牌一樣.把一個待排序的數據按照大小,插入一個已經排序好的序列中.如下所示,當你抽牌的時候,系統會自動幫你把牌放入到合適的位置.


實現思路

  • 用降序排序序列,採用線性結構實現.
  • 準備一個數據,這個數據不屬於已排序序列.在本例中,我們使用整形常量8.
  • 將準備的數據和序列的數據,從最後一個開始,依次向前對比,本例採用降序,如果發現數據比序列中的數據小,則記錄位置
  • 在記錄的位置加1處,讓序列中的數據向後移動,然後插入數據.跳出方法.插入排序完成.

代碼實現


public class Test {

	/**
	 * @param args
	 */
	
	public static int[] objTest=new int[]{13,12,11,9,7,6,5,5,3,8}; //手牌序列		
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		insertion_sort(objTest);
		for(int i=0;i<objTest.length;i++){
		System.out.print(objTest[i]+"  ");
		}
		
	}
	
	/**
	 * 插入排序實現
	 * @param arr   要插入其中的序列
	 */
	public static void 	insertion_sort(int[] arr){
		int length=arr.length-2;	//要對比的序列中最後一個數據的位置
		int data =arr[9];			//要插入的數據
		for(int i=arr.length-2;i>=0;i--){
			if(data<arr[i]){
				int index=i+1;	
				//數組依次後移
				while(length+1>index){
					arr[length+1]=arr[length];
					length--;
				}
				arr[index]=data;
				break;	//跳出循環
			}
			
			
		}
		
	}

}


參考資料

<Java數據結構與算法>
<算法導論>
<大話算法>
某大神博客:http://www.cnblogs.com/kkun/archive/2011/11/23/2260265.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章