插入排序的核心思想是站在自己該站的地方,基本原理就是通過構建有序序列,對於未排序的數據,在已排序的序列中從後往前掃描,找到自己的位置並插入。
算法描述
- 從第一個元素開始,認定該元素是已經排序完成的;
- 取出下一個元素,從已排序的序列中從後往前掃描;
- 如果已排序的序列大於待排序元素,則已排序的元素後移;
- 重複步驟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 = 0;
// 插入的數值
int current = arr[i];
for (int j = i; j > 0; j--) {
if (arr[j-1] > current) {
arr[j] = arr[j - 1];
} else {
index = j;
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] + " ");
}
}
}