动态展示
排序算法 | 平均时间复杂度 | 最好情况 | 最坏情况 | 空间复杂度 | 排序方式 | 稳定性 |
---|---|---|---|---|---|---|
插入排序 | O(n^2) | O(n) | O(n^2) | O(1) | 内部排序 | 稳定 |
算法思想
对数据进行遍历插入,初始数据第一位置的数据作为有序序列。从第二位置开始循环,通过每一次循环将当前数据,在已排序序列中从后向前扫描,找到相应位置并插入即可。当循环结束,即完成所有数据的插入,此时数据为有序序列。
//插入排序,默认升序
public class InsertSort {
public static void main(String[] args) {
int[] numbers = new int[]{3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
int i,j,temp;
// 第一个循环是每一轮为第i个位置的数据找到其位置
for (i = 1; i < numbers.length; i++) {
// temp用于暂存第i个位置的数据,因为后面为i找其合适的位置的时候,numbers[i]会被覆盖
temp = numbers[i];
// 下面的循环目的是从i位置的前一个位置倒着寻找i合适的位置,因为i之前的序列已经是有序序列
// 所以只需依次将数据后移,为i留出合适位置即可
for (j = i-1; j >=0 &&numbers[j]>temp; j--) {
numbers[j+1] = numbers[j];
}
// 上面循环结束后,j+1即为i的位置,并将此位置的数据替换为之前暂存到temp的数据
numbers[j+1] = temp;
}
// 展示数据
for (int k = 0; k < numbers.length; k++) {
System.out.print( numbers[k]+" ");
}
}
}