直接插入排序

非 Y 不嫁゛ 提交于 2019-12-10 17:45:06

直接插入排序

插入排序属于内部排序,对于要排序的元素以插入的方式寻求适当的位置,实现排序的目的。
思想:将插入元素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));
		}
	}
}

运行结果:
运行结果图

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!