蓝桥杯 插入排序

插入排序的思想

插入排序是一种简单直观的排序算法,其基本思想是将待排序的元素逐个插入到已排序序列

的合适位置中,使得已排序序列逐渐扩大,从而逐步构建有序序列,最终得到完全有序的序

列。

它类似于我们打扑克牌时的排序方式,将一张张牌插入到已经有序的手牌中。

时间复杂度为O(n^2)。

插入排序的实现

cpp 复制代码
//i表示当前要确定的位置
for(int i=2;i<=n;i++){
	
	//此时[1,i-1]已经为有序的数组
	int val=a[i],j;
	
	//将val和a[j-1]比较
	//如果val<a[j-1]就将a[j-1]往后移动一格
	//给val留出位置
	for(j=i;j>1&&val<a[j-1];j--){
		a[j]=a[j-1];
	} 
	//当循环跳出时,j==1或val>a[j] ,且此时a[j]已经往后移动
	//此时的j为val腾出的位置
	a[j]=val; 
} 

例题讲解

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+9;
int a[N];
int main(){
	int n;cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i];
	for(int i=2;i<=n;i++){
	int val=a[i],j;
	for(j=i;j>1&&val<a[j-1];j--){
		a[j]=a[j-1];
	} 
	a[j]=val; 
} 
	for(int i=1;i<=n;i++) cout<<a[i]<<" \n"[i==n];
	return 0; 
}
相关推荐
hnjzsyjyj几秒前
洛谷 P8749:[蓝桥杯 2021 省 B] 杨辉三角形 ← 组合数 + 二分
蓝桥杯·二分·杨辉三角·组合数
江奖蒋犟1 分钟前
【C++】map和set
开发语言·数据结构·c++·set·map
森G2 分钟前
3.1、移植Qt程序到ARM平台----移植Qt程序到ARM平台(扩展)
arm开发·c++·qt
汀、人工智能4 分钟前
[特殊字符] 第78课:乘积最大子数组
数据结构·算法·数据库架构·数组·前缀积·乘积最大子数组
tankeven4 分钟前
HJ168 小红的字符串
c++·算法
数据知道7 分钟前
claw-code 源码分析:cargo 视角的 definitive runtime——会话、压缩、MCP、提示构造如何落到系统语言?
算法·ai·claude code·claw code
汀、人工智能10 分钟前
[特殊字符] 第41课:翻转二叉树
数据结构·算法·数据库架构·图论·bfs·翻转二叉树
2301_8227032011 分钟前
大学生体质健康测试全景测绘台:基于鸿蒙Flutter的多维数据可视化与状态管理响应架构
算法·flutter·信息可视化·架构·开源·harmonyos·鸿蒙
鲸渔11 分钟前
【C++ 输入输出】cin、cout、cerr 与格式化输出
开发语言·c++·算法
汀、人工智能11 分钟前
[特殊字符] 第46课:验证二叉搜索树
数据结构·算法·数据库架构·图论·bfs·验证二叉搜索树