插入排序的核心思想是站在自己该站的地方,基本原理就是通过构建有序序列,对于未排序的数据,在已排序的序列中从后往前扫描,找到自己的位置并插入。
算法描述
- 从第一个元素开始,认定该元素是已经排序完成的;
- 取出下一个元素,从已排序的序列中从后往前扫描;
- 如果已排序的序列大于待排序元素,则已排序的元素后移;
- 重复步骤3,直到待排序元素找到自己的位置
- 将待排序元素插入到相应位置;
- 重复以上步骤,直到所有元素排序完成。
动态演示
算法实现
package com.lreis.algorithm.sort;
public class InsertionSort {
public static void sort(int[] arr) {
if (arr == null || arr.length == 0)
return;
int len = arr.length;
for (int i = 1; i < len; i++) {
// 插入元素当前的位置
int index = i;
// 插入的数值
int current = arr[i];
for (int j = i - 1; j >= 0; j--) {
if (arr[j] > current) {
arr[j + 1] = arr[j];
index = j;
} else {
index = j + 1;
break;
}
}
arr[index] = current;
}
}
public static void main(String[] args) {
int arr[] = { 1, 6, 79, 214, 745, 4, 7, 19, 4, 10 };
InsertionSort.sort(arr);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}