基本思想
直接插入排序是将一个记录插入到已经排好序的有序表中,从而得到一个新的记录数增1的有序表。
直接插入排序算法
void insertSort(int[] array) {
int length = array.length;
int j = 0;
for (int i = 1; i < length; i++) {
if (array[i - 1] > array[i]) {
int tmp = array[i];
j = i - 1;
for (j = i - 1; j >= 0 && array[j] > tmp; j--) {
array[j + 1] = array[j];
}
array[j + 1] = tmp;
}
}
}
直接插入排序算法的时间复杂度
最好情况下,排序表本身就是有序的,比较记录是n-1次,没有移动记录,时间复杂度O(n)。
最坏情况下,排序表本事是逆序的,比较记录是2+3+······+n次,也就是(n+2)(n-1)/2次,记录的移动次数也达到最大值3+4+······+(n+1)次,也就是(n+4)(n-1)/2次。
若排序记录是随机的,根据概率相同原则,平均比较和移动次数约为(n2)/4,所以直接插入排序的时间复杂度为O(n2)。
网友评论