插入排序(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;
}
相关推荐
2501_9403152621 分钟前
航电oj:首字母变大写
开发语言·c++·算法
lhxcc_fly37 分钟前
手撕简易版的智能指针
c++·智能指针实现
浒畔居1 小时前
泛型编程与STL设计思想
开发语言·c++·算法
Fcy6481 小时前
C++ 异常详解
开发语言·c++·异常
机器视觉知识推荐、就业指导1 小时前
Qt 和 C++,是不是应该叫 Q++ 了?
开发语言·c++·qt
liu****2 小时前
三.Qt图形界面开发完全指南:从入门到掌握常用控件
开发语言·c++·qt
小龙报2 小时前
【C语言进阶数据结构与算法】单链表综合练习:1.删除链表中等于给定值 val 的所有节点 2.反转链表 3.链表中间节点
c语言·开发语言·数据结构·c++·算法·链表·visual studio
EmbedLinX2 小时前
Linux之内存管理
linux·服务器·c语言·c++
南岩亦凛汀3 小时前
快速上手Ultimate++的编译链接和配置
c++·gui·开源框架
CoderCodingNo3 小时前
【GESP】C++五级练习题 luogu-P3353 在你窗外闪耀的星星
开发语言·c++·算法