1.排序思路:
假设待排序的元素存放在数组R[0..n-1]中,排序过程中的某一时刻,R被分成两个子区间R[0..i-1]和R[i..n-1](刚开始时,i=1,有序区只有R[0]一个元素),其中,前一个子区间是有序区,后一个子区间是无序区。直接插入排序的一趟操作是将当前无序区的第一个元素插入到有序R[0..i-1]区中合适的位置上,是的R[0..i]变为新的有序区。
2.Java实现
public static void insertSort(int[] a){
for (int i=1;i<a.length;i++){
int j = i - 1;
int tmp = a[i];//存储当前无序区的头元素,一趟插入排序后将其插入合适的位置
while(j>=0 && a[j]>tmp){
a[j+1]=a[j];
j--;
}
a[j+1]=tmp;
}
}
3.算法分析
时间复杂度:最好情况O(n),最坏情况O(n2),平均情况O(n2)。
空间复杂度:O(1)。
直接插入排序是稳定的。