插入排序:就是将数据插入到已经排好序的数列中,使得最终的数列顺序正确。
举个例子:
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;
}