插入排序
1.概念
插入排序由\(N-1\)趟排序组成。对于\(p=1\)到\(N-1\)趟,插入排序保证从位置\(0\)到位置\(p\)上的元素为一排序状态。
2.基本思想
从后面未排序的数组取出元素插入到前面已排好序的数组的合适位置中。
3.排序图例

4.核心算法
/**
* 【插入排序】 对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
* @param array
*/
public static void insertionSort(int[] array) {
int j;
for (int i = 1; i < array.length; i++) {
int tmp = array[i];
// 在前面已经有序的数组里找到可以插入的位置,同时一边移动数组元素便于腾出插入位置。
for (j = i; j > 0 && tmp < array[j - 1]; j--) {
array[j] = array[j - 1];
}
// j记录了前面合适插入的位置
array[j] = tmp;
}
}
5.算法分析
由于嵌套循环的每一个都花费N次迭代,因此插入排序为\(O(N^2)\)。如果数据已经有序,则运行时间为\(O(N)\)。