插入排序(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;
}
相关推荐
Darkwanderor2 分钟前
对Linux的进程控制的研究
linux·运维·c++
云泽80828 分钟前
从零吃透 C++ 异常:抛出捕获、栈展开、异常重抛与编码规范详解
开发语言·c++·代码规范
REDcker35 分钟前
libdatachannel 快速入门
c++·webrtc·datachannel
second602 小时前
第一部分:快速上手 —— 建立 C++ 基本语法与编程范式
开发语言·c++
郝学胜-神的一滴2 小时前
算法实战:最小k个数——大顶堆的优雅解法
开发语言·数据结构·c++·python·程序人生·算法·排序算法
bksczm3 小时前
linux之线程概念和控制
linux·开发语言·c++
hehelm3 小时前
Linux网络编程—TCP字典翻译系统
linux·开发语言·网络·c++·tcp/ip
hansang_IR3 小时前
【记录】「SCOI2016」三道模拟赛/26.7.12
c++·算法
会周易的程序员4 小时前
从零构建多核CPU负载自适应控制系统
linux·c++·笔记·物联网·测试工具
程序猿编码5 小时前
用C++从零开始造一个微型GPT,不借助任何第三方库
开发语言·c++·gpt·模型推理