插入排序原理
插入排序由N-1趟排序组成.对于p=1到N-1趟,插入排序保证从位置0到位置p上的元素为已排序状态.插入排序利用了这样的事实:已知位置0到位置p-1上元素已经处于排序状态.
插入排序策略
原始数组 | 34 | 8 | 64 | 51 | 32 | 21 | 移动的位置 |
p=1趟之后 | 8 | 34 | 64 | 51 | 32 | 21 | 1 |
p=2趟之后 | 8 | 34 | 64 | 51 | 32 | 21 | 0 |
p=3趟之后 | 8 | 34 | 51 | 64 | 32 | 21 | 1 |
p=4趟之后 | 8 | 32 | 34 | 51 | 64 | 21 | 3 |
p=5趟之后 | 8 | 21 | 32 | 34 | 51 | 64 | 4 |
在第p趟,我们将位置p上的元素向左移动,直到它在前p+1个元素中的正确位置被找到的地方.
插入排序代码实现
public void insertSort(int[] arr){
int j;
for(int p = 1;p<arr.length;p++){
int temp = arr[p];
for(j=p;j>0&&temp<arr[j-1];j--){
arr[j] =arr[j-1];
}
arr[j] = temp;
}
}
插入排序时间复杂度
由于嵌套循环的每一个都花费N次迭代,因此插入排序的时间复杂度为Θ(N²).