【排序】02.直接插入排序
基本思想
过程:
1.将要插入的值存入temp
2.temp向前比较
3.比temp大的值后移一位,比temp小的则在该值后面插入temp
n个数,需插入n-1次
代码 (for循环)
import java.util.Arrays;
public class Solution {
public static void main(String[] args) {
int arr[] = {8,5,9,6,4,7,1,2};
int j;
int temp;
for(int i = 1;i<arr.length;i++){ //从下标i=1的数开始插入
temp = arr[i]; //将要插入的值赋给temp
//j表示与temp比较的值的下标,即temp前面一个数的下标
//j--:待比较的值往前移一位
for(j = i-1;j>=0&&temp<arr[j];j--){
arr[j+1] = arr[j]; //把原来的值后移一位
}
arr[j+1] = temp; //补空位
System.out.println(Arrays.toString(arr));
}
}
}
代码(while循环)
import java.util.Arrays;
public class Solution {
public static void main(String[] args) {
int arr[] = {8,5,9,6,4,7,1,2};
int temp;
for(int i = 1;i<arr.length;i++){ //从下标i=1的数开始插入
temp = arr[i];
int j = i-1; //j表示与temp比较的值的下标,即temp前面一个数的下标
while(j>=0 && temp<arr[j]){
arr[j+1] = arr[j];//把原来的值后移一位
j--;//待比较的值往前移一位
}
arr[j+1] = temp;
System.out.println(Arrays.toString(arr));
}
}
}
总结
最好情况是已排好序,只执行n-1次赋值语句,所以时间复杂度为 O ( n ) O(n) O(n),最坏情况为逆序,时间复杂度为 O ( n 2 ) O(n^2) O(n2)。