首页 > 编程语言 >[排序算法] 插入排序 (C++)

[排序算法] 插入排序 (C++)

时间:2022-11-19 01:11:06浏览次数:36  
标签:int 插入排序 pos C++ 插入 key 序列 排序

插入排序解释

插入排序很好理解,其步骤是 :先将第一个数据元素看作是一个有序序列,后面的 n-1 个数据元素看作是未排序序列。对后面未排序序列中的第一个数据元素在这个有序序列中进行从后往前扫描,找到合适的插入位置并插入到其中,每次有序序列的长度 +1

重复这样的操作,将每个未排序序列中的元素插入到当前有序序列中合适的位置。直到未排序序列长度为 0,最后得到一个完整的有序序列,即为排序的结果。

(若当前插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)



插入排序动态演示

我们以序列 [7, 6, 4, 5, 8, 2, 3] 为例进行动态演示

第一次插入

第二次插入

第三次插入

第四次插入

第五次插入

直接插入排序 时间复杂度

最优时间复杂度

假设每一层循环,当前未排序序列中的第一个元素(待插入元素)应当插入的位置都处于当前有序序列的末尾,只需要执行一次判断就可以了。
最优时间复杂度 为: O(n)

最坏时间复杂度

假设每一层循环,当前待插入元素应当插入的位置都在当前有序序列的首位,(设当前有序序列长度为 i )那么我们每一次线性查找比较的次数为 i , 并且每次将后面元素进行后移的次数也为 i
最坏时间复杂度 为:



直接插入排序 核心代码

//插入排序
void InsertSort(vector<int> &v){
    int n = v.size();
    for(int i = 1; i < n; i++){
	int key = v[i];        //当前需要插入的数
	int j = i - 1;         //j为已排序序列的末下标
	while(j >= 0 && v[j] > key){
	    v[j + 1] = v[j];   //后移
	    j--;
	}
	v[j + 1] = key;        //插入到已排序序列中的合适位置
    }
}


优化方法 折半插入排序

线性查找每一次待插入元素在当前有序序列中合适的插入位置往往是比较低效的,因此我们自然会想到用 二分查找 来查找待插入元素合适的插入位置

标签:int,插入排序,pos,C++,插入,key,序列,排序
From: https://www.cnblogs.com/MAKISE004/p/16905341.html

相关文章

  • [排序算法] 简单选择排序 (C++)
    简单选择排序原理简单选择排序SelectSort是一种十分直观地排序方法。其原理是每次从未排序的元素中找到当前最小的元素,放在当前未排序序列的首位。一直重复操作直至最后......
  • [排序算法] 双向冒泡排序 (C++)
    前言本文章是建立在冒泡排序的基础上写的,如还有对冒泡排序不了解的童鞋,可以看看这里哦~冒泡排序C++双向冒泡排序原理双向冒泡排序的基本思想与冒泡排序还是一样......
  • C++ 反射实现
    //class.h#ifndefCLASS_H#defineCLASS_H#include<iostream>#include<functional>#include<memory>#include<map>#include<stdarg.h>usingnamespacestd;......
  • C++编写Time类显示系统时间
    编写Time类,要求:(1)包含年、月、日、时、分、秒的信息。(2)构造函数将类的对象初始化为系统当前时间(使用头文件time.h中的time函数。)(3)能按照标准格式输出对象表示的时间。......
  • C++ referemce and dereference
    //对reference&和dereference*的进一步理解//#include"iostream"intmain(){inta=9;//等号左边&为引用,取alias举个例子//int&a=b;b=......
  • c++ 调用 python 数据类型对照表
    ParsingargumentsandbuildingvaluesThesefunctionsareusefulwhencreatingyourownextensionsfunctionsandmethods.Additionalinformationandexamplesa......
  • C++不知算法系列之集结常规算法思想
    1.前言数据结构和算法是程序的2大基础结构,如果说数据是程序的汽油,算法则就是程序的发动机。什么是数据结构?指数据之间的逻辑关系以及在计算机中的存储方式,数据的存储......
  • c++ 调用 python 备忘
    PyBytesObject值的获取:PyObject*pFuncSetCredentialResult=PyObject_CallObject(pFuncSetCredential,pFuncSetCredentialArgs);PyBytesObject*pBytes......
  • 【c&c++】C语言 结构体 - 字节对齐 使用预处理命令 #pragma 对齐
    在C语言中每个数据类型都有他的对齐方式例如char是一个一节对齐,int是四个字节对齐,float是八个字节对齐,short是两个字节对齐由于对齐方式的特性就会拥有相同成员的结......
  • C语言:规则排序
    题目输入正整数n,再输入n个正整数,先将其中的奇数从小到大排序,再将偶数从大到小排序。 例如:  输入:828522391125  输出:35911252282代码#in......