常见排序算法之直接插入算法

最近在复习各类常用算法,从排序算法开始。
插入排序的直接插入排序算法,算法思路相对简单,适合于小规模的或者有序性比较高的数据集合,核心思想:其基本操作是将一条记录插入到已排好的有序表中,从而得到一个新的、记录数量增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]
		
	}
}

猜你喜欢

转载自blog.csdn.net/qq_43507104/article/details/104602911