排序之插入排序

在计算机科学中,排序算法是一种将一组元素按照某种特定顺序排列的方法。插入排序是一种简单且易于理解的排序算法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。

基本思想

插入排序的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排序的子序列中的适当位置,直到全部记录插入完成为止。

具体步骤如下:

  1. 从第一个元素开始,该元素可以认为已经被排序
  2. 取出下一个元素,在已经排序的元素序列中从后向前扫描
  3. 如果该元素(已排序)大于新元素,将该元素移到下一位置
  4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
  5. 将新元素插入到该位置后
  6. 重复步骤2~5

插入排序的主要优点是对于部分有序的数组,插入排序的效率非常高,甚至可以达到线性排序的效率。但是插入排序对于大规模数据的排序效率不高。

时间复杂度:最坏情况下为O(N*N),此时待排序列为逆序,或者说接近逆序
      最好情况下为O(N),此时待排序列为升序,或者说接近升序。
空间复杂度:O(1)

Java代码实现

下面是使用Java语言实现插入排序的代码:

java 复制代码
import java.util.Arrays;
//插入排序
public class InsertSort {

	public static void main(String[] args) {
		int[] arr = {5,7,4,2,0,3,1,6};
		sort(arr);
		System.out.println(Arrays.toString(arr));
	}

	public static void sort(int[] arr) {
		for(int i=1;i<arr.length;i++) {
			for(int j=i-1;j>=0;j--) {
				if(arr[j]>arr[j+1]) {
					int temp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = temp;
				}else {
					break;
				}
			}
		}
	}
}

这段代码首先定义了一个待排序的数组arr,然后调用sort方法对其进行排序。sort方法使用了嵌套的for循环来实现插入排序。外层循环从第二个元素开始,内层循环则从当前元素的前一个元素开始,如果前一个元素大于后一个元素,就交换它们的位置。这个过程会一直持续到整个数组都被排序。

运行结果

当你运行这段代码时,它会输出排序后的数组:[0, 1, 2, 3, 4, 5, 6, 7]。这就是插入排序的结果。

总结

插入排序是一种简单而有效的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

相关推荐
木木子228 小时前
# 密码强度检测深度解析:正则表达式实时分析、多维度评分算法与可视化反馈
mysql·算法·华为·正则表达式·harmonyos
Sw1zzle11 小时前
算法入门(四):二叉树 - 递归遍历三件套
算法·leetcode
万法若空12 小时前
【算法-查找】查找算法
java·数据结构·算法
海石12 小时前
子树怎么找?树的3种遍历方式来帮忙!
算法·leetcode
海石12 小时前
难度分 1588:思路 + 技巧 = AC
算法·leetcode
珠海西格电力15 小时前
云边端协同架构:零碳园区管理系统的技术底座
大数据·运维·人工智能·算法·架构·能源
还有多久拿退休金17 小时前
让飞书知识库跟着 commit 自己长:一套自动化知识库的真实实现
前端·算法·架构
KaMeidebaby18 小时前
卡梅德生物技术快报|小 RNA 适配体合成 + 多方法亲和力表征全流程标准化操作手册
前端·网络·数据库·人工智能·算法
是Dream呀18 小时前
基于深度学习的人类行为识别算法研究
人工智能·深度学习·算法
happyprince19 小时前
03_NVIDIA_ModelOpt-量化算法深入
人工智能·深度学习·算法