插入排序是最簡單的排序算法之一,保證從位置0到p上的元素爲已排序狀態。算法
上圖的p=1是指數據的下標,移動的位置是從位置p往左邊移動數組
看例子: spa
public void insetSort(){ int[] a = {34,8,64,51,32,21}; System.out.println(Arrays.toString(a)); int j; for (int p = 1; p < a.length ; p++) { int tmp = a[p];//記錄p位置上的值 for (j = p; j > 0 && tmp < a[j-1] ; j --) {//循環並比較大於p位置上的值,而後與之調換位置 a[j] = a[j-1]; } a[j] = tmp; } System.out.println(Arrays.toString(a)); }
以p=4趟來結合代碼說明:code
public void insetSort(){ int[] a = {8,34,51,64,32,21};//p=4趟以前的數據順序 System.out.println(Arrays.toString(a)); int j; for (int p = 1; p < a.length ; p++) { int tmp = a[p];//從這裏開始說明,這列的tmp等於32, //拿32與前面排序好的數組進行比較, //第一次比較與交換後的數組是:8,34,51,64,64,21 //第二次比較與交換後的數組是:8,34,51,51,64,21 //第三次比較與交換後的數組是:8,34,34,51,64,21 //第四次發現小於當前下標元素(這裏的下標元素是第一個34)了就直接退出循環,而後把p值賦值給當前下標的元素,得出的數組是:8,32,34,51,64,21 // for (j = p; j > 0 && tmp < a[j-1] ; j --) { a[j] = a[j-1]; } a[j] = tmp; } System.out.println(Arrays.toString(a)); }