一.算法思想
在待排序的元素中,假设前n-1个元素已有序,现将第n个元素插入到前面已经排好的序列中,使得前n个元素有序。按照此法对所有元素进行插入,直到整个序列有序。
但我们并不能确定待排元素中究竟哪一部分是有序的,所以我们一开始只能认为第一个元素是有序的,依次将其后面的元素插入到这个有序序列中来,直到整个序列有序为止。
二.代码实现
package Sort;
import java.util.Arrays;
public class InsertSort {
public static void main(String[] args) {
int[] a = {49, 38, 65, 97, 76, 13, 27, 49};
System.out.println("原始数组为" + Arrays.toString(a));
insertSort(a);
System.out.println("最终排序的结果为" + Arrays.toString(a));
}
public static void insertSort(int[] a) {
for (int i = 1; i < a.length; i++) { //a[0]不用排序
int temp = a[i]; //记录待排序元素的值
for (int j = i - 1; j >= 0; j--) {
if (temp < a[j]) {
a[j + 1] = a[j];
} else {
break;
}
a[j] = temp;
}
System.out.println("第" + i + "轮排序的结果为" + Arrays.toString(a));
}
}
}
三.运行结果
四.算法性能
- 时间复杂度:O(n*n)
- 空间复杂度:O(1)
- 稳定性:稳定