插入排序(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;
}
相关推荐
BestOrNothing_20156 小时前
C++零基础到工程实战(4.3.3):vector数组访问与遍历
c++·迭代器·stl·vector·动态数组
charlie1145141916 小时前
通用GUI编程技术——图形渲染实战(三十三)——Direct2D与Win32/GDI互操作:渐进迁移实战
c++·图形渲染·gui·win32
文祐6 小时前
C++类之虚函数表及其内存布局(一个子类继承一个父类)
开发语言·c++
墨尘笔尖8 小时前
最大最小值降采样算法的优化
c++·算法
YIN_尹9 小时前
【Linux系统编程】进程地址空间
linux·c++
EverestVIP9 小时前
C++中空类通常大小为1的原理
c++
网域小星球10 小时前
C++ 从 0 入门(六)|C++ 面试必知:运算符重载、异常处理、动态内存进阶(终极补充)
开发语言·c++·面试
晚会者荣10 小时前
红黑树的插入(有图)
c++
John.Lewis11 小时前
C++进阶(12)附加学习:STL之空间配置器(了解)
开发语言·c++·笔记
汉克老师11 小时前
GESP2023年12月认证C++三级( 第三部分编程题(2、单位转换))
c++·string·单位转换·gesp三级·gesp3级