关于插入排序的原理分析和 Java 实现

本文详细介绍了插入排序的工作原理,包括如何通过逐步将每个元素插入到已排序的部分来完成整个数组的排序,并提供了Java实现代码。此外,还分析了该算法的时间复杂度及应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,原理分析:

插入排序就像是整理扑克牌一样,将每一张牌插入到其他已经有序的牌中的适当位置。在计算机的实现中,为了给要插入的元素腾出空间,我们需要将其余所有元素在插入之前都向右移动一位。这种算法即是插入排序。

与选择排序一样,当前索引左边的所有元素都是有序的,但他们的最终位置还不确定,为了给更小(大)的元素腾出空间,它们可能会被移动。但是当索引到达数组的右端时,排序就完成了。

和选择排序不同的是,插入排序所需的时间取决于输入中元素的初始顺序。例如,对一个很大且其中元素已经有序(或接近有序)的数组进行排序将会比对随机顺序的数组或是逆序数组进行排序要快得多。

二,Java实现:

public class Insertion {
public static int[] insertionSort(int[] a) {

int tempMax;
int j;
for (int i = 1; i < a.length; i++) {
tempMax = a[i];
j = i - 1;
while (0 <= j && a[j] < tempMax) {
a[j + 1] = a[j];
a[j] = tempMax;
j--;
}
}
return a;

}

三,算法特性分析:

在第一趟排序中,插入排序最多比较一次,第二趟最多比较两次,依次类推,最后一趟最多比较N-1次。因此有:

1+2+3+...+N-1 =N*N(N-1)/2

因为在每趟排序发现插入点之前,平均来说,只有全体数据项的一半进行比较,我们除以2得到:

N*N(N-1)/4

复制的次数大致等于比较的次数,然而,一次复制与一次比较的时间消耗不同,所以相对于随机数据,这个算法比冒泡排序快一倍,比选择排序略快。

与冒泡排序、选择排序一样,插入排序的时间复杂度仍然为O(N2),这三者被称为简单排序或者基本排序三者都是稳定的排序算法

如果待排序数组基本有序时,插入排序的效率会更高。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值