前言
1.排序算法的分类
- 内部排序:
指将需要处理的所有数据都加载到内部存储器(内存)中进行排序。 - 外部排序法:
数据量过大,无法全部加载到内存中,需要借助外部存储(文件等)进行排序。 - 常见的排序算法分类
一、插入排序(Insertion Sorting)的基本概念
1.基本介绍
插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。
2.执行逻辑
把 n 个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有 n-1 个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。
二、图解过程
- 原始数据是{3,44,38,5,47}
- 把3作为有序表的数,44,38,5,47后面的数据作为无序表的数,把44插入有序表。变成:有序表中有3,44 无序表中有38,5,47
- 同理直到无序表的数据都插入到有序表
- 动态图展示(开始状态全为蓝色条)
- 完成后的数据
三、代码实现
package com.datastructure.sort;
import java.util.Arrays;
/**
* @author Hacah
* @date 2020/10/11 20:59
*/
public class InsertSort {
public static void main(String[] args) {
int[] arr = {3, 6, 1, 7, 5};
insertSort(arr);
}
public static void insertSort(int[] arr) {
// 循环排序,从第二个数开始判断所以i=1。
for (int i = 1; i < arr.length; i++) {
// 要插入进有序表的数据
int insertVal = arr[i];
// 将要插入数据的位置,开始假设在前一个位置
int insertIndex = i - 1;
// 向前找到合适的插入位置,把数据向后移动
while (insertIndex >= 0 && insertVal < arr[insertIndex]) {
// 把数据后移
arr[insertIndex + 1] = arr[insertIndex];
// 把插入的位置向前移动
insertIndex--;
}
// insertIndex + 1是插入的位置
// 把数据插入找到的位置
arr[insertIndex + 1] = insertVal;
System.out.println("第"+i+"轮插入后的数据:");
System.out.println(Arrays.toString(arr));
}
}
}