插入排序(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;
}
相关推荐
CoderCodingNo2 分钟前
【GESP】C++五级/四级练习(双指针/数学) luogu-P1147 连续自然数和
开发语言·c++·算法
Q741_1479 分钟前
海致星图招聘 数据库内核研发实习生 一轮笔试 总结复盘(2) 作答语言:C/C++ 哈夫曼编码 LRU
c语言·数据库·c++·算法·笔试·哈夫曼编码·哈夫曼树
Z1Jxxx25 分钟前
日期日期日期
开发语言·c++·算法
报错小能手36 分钟前
nginx集群聊天室(一) 初步讲解集群聊天室所需库的搭建
c++·nginx
mjhcsp39 分钟前
C++ 后缀树(Suffix Tree):原理、实现与应用全解析
java·开发语言·c++·suffix-tree·后缀树
mjhcsp1 小时前
C++ 有限状态自动机(FSM):原理、实现与应用全解析
开发语言·c++·有限状态自动机
mjhcsp1 小时前
C++ KMP 算法:原理、实现与应用全解析
java·c++·算法·kmp
好大哥呀1 小时前
C++ IDE
开发语言·c++·ide
邵伯1 小时前
Java源码中的排序算法(一)--Arrays.sort()
java·排序算法
WW_千谷山4_sch1 小时前
MYOJ_10599:CSP初赛题单10:计算机网络
c++·计算机网络·算法