插入排序(Insertion Sort)的算法描述是一種簡單直觀的排序算法。它的工作原理是通過構建有序序列,對於未排序數據,在已排序序列中從後向前掃描,找到相應位置並插入。
插入排序的平均時間複雜度爲
具體算法描述如下:
- 從第一個元素開始,該元素可以認爲已經被排序
- 取出下一個元素,在已經排序的元素序列中從後向前掃描
- 如果該元素(已排序)大於新元素,將該元素移到下一位置
- 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置
- 將新元素插入到該位置後
- 重複步驟2~5
package sortAlgorithm;
public class sortList {
//int[]從左至右排序爲從小->大
/**
* 插入排序
* 默認arr[0]是一個已經排序好的數,雖然只有一個數,
* 第一輪開始,從第二個數arr[1]和arr[0]比較,如果小於arr[0],
* arr[0]就挪到arr[1],跳出內部循環,到外部循壞內部時,arr[0]已經被往後挪了(雖然他的值還有),
* 所以外部循環時再把被擠掉的數據放到arr[0]處
*/
public static int[] insertSort(int[] arr){
for(int i=1;i<arr.length;i++){
int temp = arr[i];
int flag = i;
while((temp < arr[flag-1]) && (flag > 0)){
arr[flag] = arr[flag - 1];
flag--;
}
arr[flag] = temp;
}
return null;
}
public static void main(String[] args){
int[] arr = {1,10,2,5,3,5,23,6,9,8};
System.out.println("排序前數組:");
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
insertSort(arr);
System.out.println("");
System.out.println("排序後數組:");
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
}