最近在复习各类常用算法,从排序算法开始。
插入排序的直接插入排序算法,算法思路相对简单,适合于小规模的或者有序性比较高的数据集合,核心思想:其基本操作是将一条记录插入到已排好的有序表中,从而得到一个新的、记录数量增1的有序表。
1.思路解析如下:
原素组为: 9 3 2 6 10
2.代码如下
import java.util.Arrays;
/*
直接插入算法
核心思想:其基本操作是将一条记录插入到已排好的有序表中,从而得到一个新的、记录数量增1的有序表。
空间复杂度:涉及到值的交换所以空间复杂度为O(1)
时间复杂度:
假设有n个数字,对n个数组直接插入,最坏的情况为
1 + 2 + 3 + ... + (n - 1) = (n-1)(n-2)/2
时间复杂度为O(n ²)
*/
public class StraightInsertionSort {
public static void main(String[] args) {
//定义待排序数组
int[] arrays = {48,85,99,145,14,1,78,23,66};
//开始排序
for(int i = 1;i < arrays.length;i ++) {
//取出arrays[i]用来比较和插入
int temp = arrays[i];
for(int j = i - 1;j >= 0;j --) {
if (temp < arrays[j]) {
//如果arrays[j] 大于 temp
//把arrays[j]的数组往后移动一位
//因为我们已经吧array[i]取出来了所以不用担心他会丢失
arrays[j + 1] = arrays[j];
}else {
//如果小于那就退出这层循环
//为什么要break?
//因为我们要取出temp要放得位置
break;
}
//跳出来的位置就是我们temp应该存放的位置
arrays[j] = temp;
}
}
System.out.println(Arrays.toString(arrays)); //[1, 14, 23, 48, 66, 78, 85, 99, 145]
}
}