排序之插入排序

在计算机科学中,排序算法是一种将一组元素按照某种特定顺序排列的方法。插入排序是一种简单且易于理解的排序算法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增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)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

相关推荐
罗西的思考41 分钟前
【GUI-Agent】阿里通义MAI-UI 代码阅读(2)--- 实现
人工智能·算法·机器学习
流年如夢1 小时前
单链表进阶版 -->双向链表
数据结构·链表
刀法如飞2 小时前
TypeScript 数组去重的 20 种实现方式,哪一种你还不知道?
前端·javascript·算法
流年如夢2 小时前
单链表 -->增、删、查、改等详细操作
c语言·数据结构
sali-tec3 小时前
C# 基于OpenCv的视觉工作流-章66-直线夹角
图像处理·人工智能·opencv·算法·计算机视觉
AC赳赳老秦3 小时前
接口测试自动化:用 OpenClaw 对接 Postman,实现批量回归测试、测试报告自动生成与推送
java·人工智能·python·算法·elasticsearch·deepseek·openclaw
_风满楼3 小时前
TDD实战-会议室冲突检测的红绿重构循环
前端·javascript·算法
pq2173 小时前
java实现遗传算法
算法
木井巳4 小时前
【递归算法】单词搜索
java·算法·leetcode·决策树·深度优先
咚咚王者5 小时前
人工智能之RAG工程 第一章 RAG 基础与前置知识
人工智能·算法