一)定义
直接插入排序( straight insertion sort )是一种最简单的排序方法。它的基本操作是将一个记录插入到一个长度为 m (假设)的有序表中,使之仍保持有序,从而得到一个新的长度为 m + 1 的有序表。
例如:
二)插入排序实现(java)
// 升序 public static void sort(int[] a) { for (int i = 1; i < a.length; i++) { int j = i; int temp = a[j]; while (j > 0 && temp < a[j - 1]) { a[j] = a[j - 1]; j--; } a[j] = temp; } } public static void main(String[] f) { int[] a = new int[25]; Random random = new Random(); for (int i = 0; i < a.length; i++) { a[i] = random.nextInt(1000); } InsertSort.sort(a); for (int a_ : a) System.out.println(a_); }
此算法外循环 n-1 次,在一般情况下内循环平均比较次数的数量级为O(n) ,所以算法总时间复杂度为O(n2) 。
插入排序的过程中比较的过程就是一个查找的过程,为了更加快速的找到“合适的位置”,可以使用高效些的查找算法,例如和折半查找结合,就形成了折半插入排序。