【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;
    }
}

分析

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

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

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

相关推荐
wostcdk20 小时前
ST表 & RMQ问题
算法
陈天伟教授20 小时前
人工智能应用- 材料微观:07.SliceGAN 模型
人工智能·神经网络·算法·机器学习·推荐算法
郝学胜-神的一滴21 小时前
Python中的del语句与垃圾回收机制深度解析
服务器·开发语言·网络·python·算法
手握风云-21 小时前
Java 数据结构第三十期:LRUCache 的“遗忘机制”
数据结构
重生之后端学习21 小时前
17. 电话号码的字母组合
java·开发语言·数据结构·算法·深度优先
0 0 021 小时前
CCF-CSP 32-2 因子化简(prime)【C++】考点:素数因子分解(试除法)
开发语言·数据结构·c++·算法
yyy(十一月限定版)21 小时前
图论——最短路Dijkstra算法
算法·图论
重生之我是Java开发战士21 小时前
【优选算法】分治:快速排序与归并排序
算法
专注VB编程开发20年21 小时前
早期的redis是进程内的字典列表操作,后面改成TCP网络调用
数据库·redis·算法·缓存
仰泳的熊猫21 小时前
题目1545:蓝桥杯算法提高VIP-现代诗如蚯蚓
数据结构·c++·算法·蓝桥杯