蓝桥杯 插入排序

插入排序的思想

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

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

列。

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

时间复杂度为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; 
}
相关推荐
xlp666hub20 小时前
Leetcode第一题:用C++解决两数之和问题
c++·leetcode
ZhengEnCi1 天前
08c. 检索算法与策略-混合检索
后端·python·算法
程序员小崔日记1 天前
大三备战考研 + 找实习:我整理了 20 道必会的时间复杂度题(建议收藏)
算法·408·计算机考研
lizhongxuan1 天前
AI小镇 - 涌现
算法·架构
AI工程架构师1 天前
通常说算力是多少 FLOPS,怎么理解,GPU和CPU为什么差异这么大
算法
不想写代码的星星1 天前
C++继承、组合、聚合:选错了是屎山,选对了是神器
c++
祈安_1 天前
Java实现循环队列、栈实现队列、队列实现栈
java·数据结构·算法
归去_来兮2 天前
拉格朗日插值算法原理及简单示例
算法·数据分析·拉格朗日插值
千寻girling2 天前
Python 是用来做 AI 人工智能 的 , 不适合开发 Web 网站 | 《Web框架》
人工智能·后端·算法
颜酱2 天前
一步步实现字符串计算器:从「转整数」到「带括号与优化」
javascript·后端·算法