直接插入排序
插入排序属于内部排序,对于要排序的元素以插入的方式寻求适当的位置,实现排序的目的。
思想:将插入元素insertVal 在arr[1]~arr[n-1]范围中选取,从arr[i]开始依次与arr[i]之前排好序的元素们进行比较直到找到合适位置插入。
时间复杂度 | 空间复杂度 | 稳定度 |
---|---|---|
O(n²) | O(1) | 稳定 |
public class InsertSort {
public static void main(String[] args) {
int [] array=new int[] {-2,9,2,5,-1,10,6,4,12};
System.out.println("初始顺序:");
System.out.println(Arrays.toString(array));
sort(array);
}
public static void sort(int[] arr) {
for (int i = 1; i < arr.length; i++) {
if(arr[i]<arr[i-1]) {
int insertVal=arr[i];
int insertIndex=i-1;
while(insertIndex>=0&&insertVal<arr[insertIndex]) {
arr[insertIndex+1]=arr[insertIndex];
insertIndex--;
}
//判断是否需要赋值
//没有这个判断,如果待插入数已经是最大,就不会执行上面while语句进行比较,
//此时 insertIndex==i 不需要赋值
//否则执行 arr[insertIndex+1]=insertVal 会有BUG
if(insertIndex!=i) {
arr[insertIndex+1]=insertVal;
}
}
System.out.println("第"+i+"轮排序后:");
System.out.println(Arrays.toString(arr));
}
}
}
运行结果:
来源:CSDN
作者:Kun_lei
链接:https://blog.csdn.net/Kun_lei/article/details/103478760