前言
排序算法可以分爲基本排序算法和高級排序算法,如果從基本算法裏找出性能最好的算法,那麼插入排序算是不二之選了.他的時間複雜度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; //跳出循環
}
}
}
}