標籤:stat arrays 時間 div pac ati 實現 大小 package
基本過程:
每次將待排元素和已經排序好的序列進行比較,按照大小順序插入進去,重新構造一個新的有序序列。
插入排序演算法有種遞迴的思想在裡面,它由N-1趟排序組成。初始時,只考慮數組下標0處的元素,只有一個元素,顯然是有序的。
然後第一趟 對下標 1 處的元素進行排序,保證數組[0,1]上的元素有序;
第二趟 對下標 2 處的元素進行排序,保證數組[0,2]上的元素有序;
.....
.....
第N-1趟對下標 N-1 處的元素進行排序,保證數組[0,N-1]上的元素有序,也就是整個數組有序了。
它的遞迴思想就體現在:當對位置 i 處的元素進行排序時,[0,i-1]上的元素一定是已經有序的了
Java代碼實現:
package paixu;import java.util.Arrays;public class Charu { public static void insertSort(int[] numbers){ int size = numbers.length; for(int i = 0 ; i < size ; i++){ int temp = numbers[i]; //假如temp比前面的值小,則將前面的值後移 for(int j = i ; j > 0 && temp < numbers[j-1] ; j --){ numbers[j] = numbers[j-1]; } numbers[j] = temp; } } public static void main(String[] args) { int a[] = {46,79,56,38,40,84}; insertSort(a); System.out.println(Arrays.toString(a)); }}
演算法效能分析:
時間複雜度:當待排數組有序時,沒有移動操作,此時複雜度為O(N),當待排數組是逆序時,比較次數達到最大--對於下標 i 處的元素,需要比較 i-1 次。總的比較次數:1+2+...+N-1 ,故時間複雜度為O(N^2)
空間複雜度:O(1)。
穩定性:插入排序是在一個已經有序的小序列的基礎上,一次插入一個元素。比較也是從有序序列的末尾開始,如果碰見一個和插入元素相等的,那麼插入元素把想插入的元素放在相等元素的後面。所以,相等元素的前後順序沒有改變,
所以插入排序是穩定的。
Java排序演算法之插入排序