插入排序时较简单的一种排序方法,可以分为直接插入排序以及在直接插入排序基础上衍生出的其他插入排序方法。
插入排序的基本思想是:在要排序的一组数中,假设前面的n-1[n>=2]个数已经是排好顺序的,现在要将第n个数字插入到前面有序的数字中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。
这种排序方法的算法复杂度为O(n),其Java实现如下:
// insert_sort
publicint[] insert_sort(int[] arr) {
int[] intArr = arr;
int i, j, key;
for (j = 1; j < intArr.length; j++) {
key = intArr[j];
i = j - 1;
while (i >= 0 && intArr[i] > key) {
intArr[j] = intArr[i];
i--;
}
intArr[i + 1] = key;
}
return intArr;
}
实例:
采用插入排序对序列1,3,2,5排序,排序过程如下所示:
(1) j=1,key=3,i=0------- 1 3 2 5
(2) j=2,key=2,i=1--------1 2 3 5
(3) j=3,key==,i=2--------1 2 3 5
上例结果中省略了i自减的步骤,实际步骤是当j每增加1,就将intArr[j]与它前面的所有元素比较,当intArr[j]前面的元素大于intArr[j]时,就将其与它前面的一个元素交换,直至排序完成。