本文共 1553 字,大约阅读时间需要 5 分钟。
插入排序是一种经典的简单排序算法,它的工作原理与日常生活中的整理行为有着相似的逻辑。通过对待排序数组的逐步调整,插入排序能够有效地将数组按顺序排列。以下将详细介绍插入排序的原理、与选择排序的区别、Java代码实现以及适用场景。
插入排序的基本思想是从数组中逐个取出一个元素,并将其插入到已排序的前一部分中,直到整个数组被排序。具体步骤如下:
以数组 [1, 3, 2, 4, 6]
为例:
1
,插入目标数组,目标数组为 [1]
。3
,插入目标数组,目标数组为 [1, 3]
。2
,插入目标数组:2
小于 3
,插入位置变为 [1, 2, 3]
。4
,插入目标数组:4
大于 3
,插入位置变为 [1, 2, 3, 4]
。6
,插入目标数组:6
大于 4
,插入位置变为 [1, 2, 3, 4, 6]
。通过上述步骤,我们完成了对原始数组的插入排序。
与选择排序相比,插入排序在处理已经部分排序的数组时效率更高。选择排序需要对整个数组中的元素进行多次比较,与当前位置的元素交换位置。而插入排序则是将元素逐一插入到已经排序好的数组中,时间复杂度因此也会相应降低。
以下是插入排序的Java代码示例:
public class InsertSort { public static void sort(int[] array) { int length = array.length; for (int i = 0; i < length; i++) { int current = array[i]; int j = i - 1; while (j >= 0 && current <= array[j]) { array[j] = current; current = array[j - 1]; j--; } array[j + 1] = current; } } public static void main(String[] args) { int[] array = {1, 3, 2, 4, 6}; sort(array); for (int num : array) { System.out.print(num + " "); } // 输出:1 2 3 4 6 }}
插入排序的时间复杂度取决于数组的初始状态:
O(n)
,因为每个元素仅需一次移位操作。O(n^2)
,因为元素可能需要多次移动到其正确位置。这种复杂度特性使得插入排序在以下场景下表现优越:
[2, 1, 3]
只需对 2
进行调整。[4, 5, 6, 1, 2, 3]
,其中 4、5、6
已经处于正确位置。通过以上分析,可以清晰地看到插入排序在具体应用场景中的优势。
转载地址:http://tmxzk.baihongyu.com/