排序(三):插入排序法

当下热点:我写下这篇博文的热点话题是蓝洞起诉网易侵权,快手和抖音被勒令整改,星巴克咖啡严重致癌被辟谣,饿了么被阿里收购,美团收购摩拜。

基本思想:

把数组分为两个部分,每次将后部分的第一个数插入前面部分进行排序,然后循环实现总体排序。

流程图如图:
这里写图片描述

每次把第二部分的开头一个数插入第一部分,被插入的数在第一部分进行排序放入相应位置。

java代码实现:

import java.util.Scanner;
public class InsertSort {

    public static void main(String[] args) {
        int[] numbers = new int[5];
        Scanner scanner = new Scanner(System.in);
        for(int i=0;i<numbers.length;i++){
          numbers[i] = scanner.nextInt();
        }
        insertSort(numbers);
        for(int j =0;j<numbers.length;j++){
            System.out.print(numbers[j]+",");
        }

    }
public static void insertSort(int[] numbers){
    int size = numbers.length;
    int temp =0;
    int j =0 ;
    for(int i =1 ;i<size;i++){
        temp = numbers[i];
        for(j=i;j>0 && temp<numbers[j-1];j--){
            numbers[j]=numbers[j-1];
        }
        numbers[j]=temp;
    }
}
}

举例运行:
输入:9,4,8,3,6
输出:3,4,6,8,9

这里我们讲一遍代码流程:
for循环,当int i =1 (i< size = 5)
把numbers[1] 赋值给temp;( 即temp = numbers[1] )
此时temp = 4,
进入第二个for循环,j=i=1 temp=4 < numbers[(j-1)=0] (= 9)
然后把numbers[0]赋值给numbers[1],即numbers[1]=9
再次循环,j– = 0 ,j>0不成立,所以退出循环
执行 numbers[j]=temp ,把temp赋值给numbers[j]
numbers[0] = temp = 4;
所以第一轮循环的排序变为 4,9,8,3,6
4,9变为第一部分, 8,3,6变为第二部分
下面的循环依次类推。

时间复杂度O(n*n) 性能上优于冒泡排序和选择排序

猜你喜欢

转载自blog.csdn.net/weixin_38364803/article/details/79856431