直接插入排序java
排序過程如上圖(圖非原創)數組
該排序原理以下:緩存
將一個擁有n個元素的待排序的數據序列R數組當成兩個序列(自己仍是一個序列),一個有序序列,一個無序序列。剛開始時,有序序列中只有一個元素,也就是R[0],而無序序列中則是R[1]到R[n-1]。而後每次拿出無序序列中第一個元素,此時是R[1],將其與有序序列中的最後一位數字做比較,若是無序序列中的第一個元素<有序序列中的最後一個元素,說明此時要對該數字進行排序。而排序的操做則是將無序序列中的第一個元素進行緩存到變量temp,而後與有序序列中的最後一個元素比較,若是temp比有序序列中的最後一個元素小,那麼將有序序列的最後一個元素向後移動一位,而後接着拿有序序列中的前一位與temp比較,直到找到這個數值(temp)合適的位置,而後將該數值直接插入到該位置上。因此叫作直接插入排序。
code
具體代碼以下:排序
public int[] sort(int[] sort) { int temp; // 監視哨,也就是緩存即將用於比較的數字 int i, j; // 從數組第2個數字開始與前一個數字比較 for (i = 1; i < sort.length; i++) { if (sort[i] < sort[i - 1]) { temp = sort[i]; // 將要進行插入的數字緩存 // 查找這個數字的適當位置 // 將緩存的數字temp與有序序列中最後一位數字依次向前進行比較, // 若是它比有序序列中的數字小,那麼將有序序列中的那個數字向後移一位, // 不然該位置就是temp元素應該在的位置,那麼插入該數字便可。 for (j = i ; j > 0 && sort[j-1] > temp; j--) { sort[j] = sort[j-1]; } sort[j] = temp; } } return sort; }