排序算法(三):插入排序
一、排序原理
1. 把所有的元素分为两组,已排序的和未排序的。
2. 找到未排序数组的第一个元素,向已排序的数组中插入。
3. 倒序遍历已排序的元素,依次和待插入的元素进行比较,直到找到一个元素小于等于待插入元素,那么就把待插入元素放到这个位置,其他元素向后移动一位。
二、代码实现
import java.util.Arrays; /** * 插入排序 */ public class InsertSort { public static void main(String[] args) { Integer[] arr = {4, 5, 3, 9, 2, 1}; sort(arr); System.out.println(Arrays.asList(arr).toString()); } public static void sort(Comparable[] a) { for (int i = 0; i < a.length; i++) { for (int j = i; j > 0; j--) { // 比较索引j处的值和索引j-1处的值,如果j-1处的值比j处的值大,则交换。如果不大,则证明找到合适的位置了,退出本次循环 if (greater(a[j - 1], a[j])) { exch(a, j, j - 1); } else { break; } } } } private static boolean greater(Comparable i, Comparable j) { return i.compareTo(j) > 0; } public static void exch(Comparable[] a, int i, int j) { Comparable temp = a[i]; a[i] = a[j]; a[j] = temp; } }
三、插入排序时间复杂度分析
按照大O推导法则,可得知插入排序的时间复杂度为O(n^2)。
适用场景:适用元素较少的排序场景。