排序算法-插入排序 InsetSort
插入排序算法的步骤如下:
1、把arr[0]看作有序序列,arr[1]-arr[n]看作无序序列
2、从头到尾扫描arr[1]-arr[n],将扫描到的数据插入有序序列的合适位置中,如果与有序序列中某元素相等则插入该元素后面
总结:第一个元素看为有序表,其他元素看为无序表,将无序逐一插入有序

时间复杂度:
平均时间复杂度 O(n^2)
最坏时间复杂度 O(n^2)
最好时间复杂度 O(n)
该算法数据稳定
伪代码
for j=1 to A.length:
key=A[j]
//将A[j]插入已排序序列A[1..j-1]
i=j-1
while i>0 and A[i]>key
A[i+1]= A[i]
i=i-1
if i+1!=j
A[i+1]=key
程序:
package Sort;
import java.util.Arrays;
public class InsertSort1 {
public static void main(String[] args) {
int[] arr = {10,-1,-3,13,234,35,-9,3};
System.out.println(Arrays.toString(arr));
insertSort(arr);
System.out.println(Arrays.toString(arr));
}
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; //定位到待插入数据的前一个位置,等待进行比较
//insertIndex>=0防止数组越界
//待插入数据小于前一数据,需要继续往前比较,将比较过的数据后移
while(insertIndex>=0&&insertVal<arr[insertIndex]){
arr[insertIndex+1]=arr[insertIndex];
insertIndex--;
}
//找到插入位置,但是走出while时-1才不符合条件,故当前位置定位的后一个位置为插入位置,并且如果 插入位置与本身所处位置相同就不用插入,跳过即可
if(insertIndex+1!=i){
arr[insertIndex+1]=insertVal;
}
}
}
}
PS:正处于学习阶段的一个代码小同学,一直仰望能持续写博客的大神们,希望通过博客归纳总结所学过的东西。文章基本是对学过的看过的文章或教程的个人总结,掺杂了个人理解,不对的地方欢迎各位大佬交流指教。
作者: Youngst-爱学习的小杨同学
出处:https://www.cnblogs.com/youngst/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

浙公网安备 33010602011771号