插入排序(Insertion_sort)

最简单的一种排序

基本思想就是从第一个元素开始,每次排列一个元素,一直排列到结尾

例如:

cpp 复制代码
3  1  4  5  7  2  6

第一个元素不用排序,从第二个开始

因为3 > 1所以直接将3覆盖到1上

cpp 复制代码
3  3  4  5  7  2  6

而1用一个变量先存储着

就这样一直覆盖,直到找到比1小或者到最开头为止

然后结束循环的位置就是这个元素的位置

结束循环位置是0在,则赋值为

cpp 复制代码
1  3  4  5  7  2  6

然后改排序4了

因为3小于4所以直接结束循环,将4的位置还是赋值给4

cpp 复制代码
1  3  4  5  7  2  6

然后排序5和7也是一样

接着排序2,这里直接写出排序2的步骤,自行理解

cpp 复制代码
1  3  4  5  7  7  6
cpp 复制代码
1  3  4  5  5  7  6
cpp 复制代码
1  3  4  4  5  7  6
cpp 复制代码
1  3  3  4  5  7  6

然后结束循环

赋值:

cpp 复制代码
1  2  3  4  5  7  6

6不在演示

c++代码如下:

cpp 复制代码
#include <bits/stdc++.h>

using namespace std;

void Insertion_sort(int *arr,int size)
{
    int i,j;
    for(i = 1;i < size;++i)//第一个元素不用排序
    {
        int t = arr[i];
        for(j = i-1;j >= 0 && arr[j] > t;--j)
        {
            arr[j+1] = arr[j];//直接覆盖,速度更快(将前一个覆盖到后面)
        }
        arr[j+1] = t;//因为是覆盖,所以要最后赋值
    }
}

void print_arr(int *arr,int size)
{
    for(int i = 0;i < size;++i)
    {
        cout << arr[i];
        if(i != size-1)
        {
            cout << " ";
        }
    }
}

int main()
{
    int n;
    cin >> n;
    int arr[n];
    for(int i = 0;i < n;++i)
    {
        cin >> arr[i];
    }
    Insertion_sort(arr,n);

    print_arr(arr,n);
    cout << endl;
}
相关推荐
ZZZS05167 分钟前
stack栈练习
c++·笔记·学习·算法·动态规划
位东风30 分钟前
【c++学习记录】状态模式,实现一个登陆功能
c++·学习·状态模式
雷羿 LexChien3 小时前
C++内存泄漏排查
开发语言·c++
嘉小华3 小时前
CMake 完全指南:第一章 - 构建的烦恼 - 为什么需要CMake?
c++
Feliz Da Vida3 小时前
[代码学习] c++ 通过H矩阵快速生成图像对应的mask
c++·学习
无聊的小坏坏4 小时前
单调栈通关指南:从力扣 84 到力扣 42
c++·算法·leetcode
YOLO大师5 小时前
华为OD机试 2025B卷 - 小明减肥(C++&Python&JAVA&JS&C语言)
c++·python·华为od·华为od机试·华为od2025b卷·华为机试2025b卷·华为od机试2025b卷
今天背单词了吗9805 小时前
算法学习笔记:11.冒泡排序——从原理到实战,涵盖 LeetCode 与考研 408 例题
java·学习·算法·排序算法·冒泡排序
看到我,请让我去学习6 小时前
OpenCV编程- (图像基础处理:噪声、滤波、直方图与边缘检测)
c语言·c++·人工智能·opencv·计算机视觉
xiaolang_8616_wjl15 小时前
c++文字游戏_闯关打怪2.0(开源)
开发语言·c++·开源