插入排序:就是將數據插入到已經排好序的數列中,使得最終的數列順序正確。
舉個例子:
5 | 8 | 3 | 5 | 2 |
第一輪:
這個數組,我們可以先把 5 這個第一位數字視爲已經排好的數列,將8加入順序排好的隊列中。
1. 8和5做比較,8大於5,所以8排在5右邊;
5 | 8 | 3 | 5 | 2 |
第二輪:
現在 5 8 就是已經排好的數組,將3插入這個隊列中。
1. 8和3比較,3比8小,3應該排在8的左邊(代碼中實現可以只將8移動到3的位置,3先拿一個數字緩存,最後找到自己位置再賦值,減少每次數字互換)
2. 3和5比較,3比5小,3應該在5的左邊;
3 | 5 | 8 | 5 | 2 |
第三輪:
3 5 8 是有序數組,將5插入。
1. 5和8比較,5小,5在8左邊;
2. 5和5比較,5不比左邊5小,不交換;
3 | 5 | 5 | 8 | 2 |
第四輪:
3 5 5 8 是有序數組,將2插入。
1. 2和8比較,2小,2在8左邊;
2. 2和5比較,2小,2在5左邊;
3. 2和5比較,2小,2在5左邊;
4. 2和3比較,2小,2在3左邊;
2 | 3 | 5 | 5 | 8 |
代碼如下:
private int[] querySort1(int array[]) {
for (int i = 1; i < array.length; i++) {
int temp = array[i];
int j = i - 1;
for (; j >= 0 && temp < array[j]; j--)
array[j + 1] = array[j];
array[j + 1] = temp;
}
return array;
}