【408DS算法题】014基础-直接插入排序

Index

题目

编写函数,实现对顺序表的直接插入排序。


实现代码

cpp 复制代码
#include <vector>
using namespace std;

void insertionSort(vector<int>& a){
	// 排序前认定元素[0]为排序完成
    for (int i = 1; i < a.size(); i++){
        // 区间[0,i-1]已排序完成,定义变量cur记录当前要插入元素
		int cur = a[i];
        int j = i - 1;
		// 不断后移大于cur的元素,为cur腾出位置
        while (j>=0 && a[j]>cur) {
            a[j+1] = a[j];
            j--;
        }
		// 将cur归位
        a[j+1] = cur;
    }
}

分析

插入排序也是一种简单直观的排序算法,具体思想是:在未完成排序元素中选定一个元素,从后向前扫描完成排序元素,找到合适的位置插入。

插入排序的变种包括:直接插入排序、二分插入排序、链表插入排序、希尔排序。

其中最基本的就是直接插入排序,它逐个扫描元素完成插入操作,并能保证算法的稳定性(相等的元素排序前后相对位置不变)。

相关推荐
做一个码农都是奢望2 分钟前
计算机控制系统:最小拍控制系统设计入门
数据结构·算法
米粒16 分钟前
力扣算法刷题 Day 16
算法·leetcode·职场和发展
重生之后端学习6 分钟前
31. 下一个排列
数据结构·算法·leetcode·职场和发展·排序算法·深度优先
Frostnova丶7 分钟前
LeetCode 3212. 统计X和Y出现次数相等的子矩阵数量
算法·leetcode·矩阵
We་ct8 分钟前
LeetCode 53. 最大子数组和:两种高效解法(动态规划+分治)
前端·算法·leetcode·typescript·动态规划·分治
sin°θ_陈9 分钟前
CVPR 2026的3DGS卷到什么地步?工程语义上探:BrepGaussian如何打通图像到CAD的最后一公里?(Part III 1-3)
python·深度学习·算法·机器学习·3d·webgl
没头脑的男大9 分钟前
环形链表很曼妙的一个做题思路
数据结构·链表
shehuiyuelaiyuehao10 分钟前
算法9,滑动窗口,长度最小的子数组
数据结构·算法·leetcode
葳_人生_蕤10 分钟前
hot100——动态规划
算法·动态规划
量化炼金 (CodeAlchemy)12 分钟前
【交易策略】基于决策树的机器学习策略:从预测价格到预测市场结构
算法·决策树·机器学习