插排
-
算法思想(插入、比较、排序)
流程:
(1)首先对数组的前两个数据进行从小到大的排序。
(2)然后插入第3个数据,让它和排好序的两个数从右往左一次进行比较,将第3个数据插入到合适的位置。
(3)继续将第4个数据插入到已排好序的前3个数据 中。
(4)不断重复上述过程,直到把最后一个数据插入合适的位置。最后,便完成了对原始数组的从小到大的排序。 -
例子
-
时间复杂度
分析:
前两个数比较,比较次数为1,
第3个数插入时,和前两个数进行比较,比较次数为2,
第n个数插入,比较次数为n-1。
因此总比较次数是
S(n)= 1+2+…+(n-2)+(n-1)
= 1/2n^2-1/2n
故,时间复杂度写成了O(n^2)
4.空间复杂度
和冒泡排序分析的一样,它也是一个一对一的转换。只用到一个临时位置。
5.java代码
for (int i = 0; i < A.length; i++) {
int newVal = A[i];
int j = i - 1;
while (j >= 0 && A[j] > newVal) {
A[j + 1] = A[j];
j--;
}
A[j + 1] = newVal;
}