插入排序
插入排序属于内部排序法,是对欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。
插入排序的思想
插入排序的基本思想是:把n个待排序的元素看成一个有序列表和一个无序列表,开始时有序列表只包含一个元素,无序列表包含n-1 个元素,排序过程中每次从无序列表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行对比,将它插入到有序表中的适当位置,使之成为新的有序表。
插入排序的思路图
代码实现
public class InsertSort {
//插入排序
public static void InsertSort(int[] arr){
int insertval=0;//需要插入的值
int insertIndex=0;//插入值的前面一个元素的下标
for (int i = 1; i < arr.length; i++) {
insertval=arr[i];
insertIndex=i-1;
while (insertIndex>=0 && insertval<arr[insertIndex]){
arr[insertIndex+1]=arr[insertIndex];
insertIndex--;
}
//要插入的值的位置找到了
if(insertIndex+1!=i){
arr[insertIndex+1]=insertval;
}
}
}
}
插入排序的时间复杂度为O(n^2) 因为经历了两次循环,空间复杂度O(1)