插入排序——直接插入排序
直接插入排序的思想是:顺序地将待排序的数据元素按其值大小插入到已排序的数据元素中。
算法实现如下 :
java
public static void insertSort(int[] a) {
int i, j, temp;
int n = a.length;
for (i = 0; i < n - 1; i++) {
temp = a[i + 1];// 要插入有序部分的值
j = i;
while (j > -1 && temp <= a[j]) {// 从后往前 如果插入的数字比这一个小 继续前移
a[j + 1] = a[j];
j--;
}
a[j + 1] = temp;// 跳出循环则说明,这个数字比a[j]大或者已到达数组头部 所以应将其放在j+1位
}
}
空间复杂度显然为O(1)
时间复杂度 最好情况下为 O(n) ,即原始数据已是有序的,此时,算法内层的while循环执行次数为0
最坏的情况为原始数据元素为反序排列,此时,算法内层每次while循环执行次数为i 此时为O(n^2)