当下热点:我写下这篇博文的热点话题是蓝洞起诉网易侵权,快手和抖音被勒令整改,星巴克咖啡严重致癌被辟谣,饿了么被阿里收购,美团收购摩拜。
基本思想:
把数组分为两个部分,每次将后部分的第一个数插入前面部分进行排序,然后循环实现总体排序。
流程图如图:
每次把第二部分的开头一个数插入第一部分,被插入的数在第一部分进行排序放入相应位置。
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) 性能上优于冒泡排序和选择排序