1.概念
1.1 排序:
排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。平时的上下文中,如果提到排序,通常指的是排升序(非降序)。通常意义上的排序,都是指的原地排序(in place sort)。
1.2 稳定性
两个相等的数据,如果经过排序后,排序算法能保证其相对位置不发生变化,则我们称该算法是具备稳定性的排序算法。
上述排序后的结果黑色数字2和红色数字2的相对位置没有发生改变,其排序是稳定的。
1.3 直接插入排序
每次选择无序区间的第一个元素,在有序区间内选择合适的位置插入。
代码实例:
示例图:
public class 排序 {
//直接插入排序
//1.时间复杂度:最坏情况O(N^2)最好是O(N)
//2.空间复杂度:O(1)
//3.稳定性:稳定
//特点:数据越有序,直接插入排序越块
private static void insertSort(int[] array){
for (int i = 1; i <array.length ; i++) {
int j;
int tmp=array[i];
for (j = i-1; j >=0 ; j--) {
//如果array[j]>=tmp,则排序是不稳定的,元素的相对位置发生了改变。
if(array[j]>tmp){
array[j+1]=array[j];
} else{
//前面已经有序了
break;
}
}
array[j+1]=tmp;
}
}
public static void main(String[] args) {
int [] array={12,4,6,9,2};
insertSort(array);
System.out.println(Arrays.toString(array));
}
}
运行结果:[2, 4, 6, 9, 12]