一、原理
插入排序的原理即是,从第二个元素开始,找到合适的位置,将元素插入到之前已排好序的元素中去,依次下去最终完成排序。就类似打扑克牌,每次抓到一张新的牌时,都将其插入到手中已排好序的牌组中。
插入排序适用于少量数据的排序,特别是将一个新的元素插入到已有的排好序的数组中,插入排序是一种稳定的排序方法。
插入排序的时间复杂度为 O(n^2)。
由于每次插入一个新的元素,都需要遍历之前的元素,这种遍历方式的时间复杂度为 O(n),排序相当于需要插入 n 个元素,即综合时间复杂度为 O(n^2)。
二、示例代码
public class InsertSort {
public static void main(String[] args) {
int[] nums = {5, 2, 4, 5, 1, 3};
sort(nums);
for (int i = 0; i < nums.length; i++) {
System.out.println(nums[i]);
}
}
private static void sort(int[] nums) {
for (int i = 1; i < nums.length; i++) {
for (int j = i; j > 0; j--) {
if (nums[j] < nums[j - 1])
swap(nums, j, j - 1);
else
break;
}
}
}
private static void swap(int[] nums, int j, int i) {
int tmp = nums[j];
nums[j] = nums[i];
nums[i] = tmp;
}
}