2.1插入排序

一、概述

2.1插入排序

1、适用场景:对少量元素进行排序,当元素数量较多时,插入排序的效率低

2、算法过程的描述:现有n个无序的数,依次将第1,2,3……n个数插入到有序数列中,如下图所示:

2.1插入排序

二、算法导论代码

1、伪代码

2.1插入排序

注:伪代码中,数组下标从1开始,C++具体代码中,数组下标从0开始

2、伪代码的实现

#include 
using namespace std;

bool insertion_sort(int array[], int array_length) {  //按照从小到大排序
    int key, i;

    for (int j = 1; j < array_length; ++j) {  //j表示第j个将要插入到有序数列的数
        key = array[j];                       //使用key记录第j个数

        i = j - 1;                             //使用i记录第j个数的前一个数的位置
        while (i >= 0 && array[i] > key) {    //只有 aj < a'j-1,才执行while循环(前j-1个数是有序的, a'0 ≤ a'1 …… ≤a'j-1)
            array[i + 1] = array[i];          //将a'0,a'1,a'2,…… a'j-1中大于aj的数向右移动一个位置
            i = i - 1;                        //将i指向前一个数
        }
        array[i + 1] = key;                   //如果执行了while循环,i+1表示第j个数将要插入的位置,将第j个数插入到有序数列中
    }

    return true;
}

int main() {

    int array[10] = { 5,2,1,8,7,9,3,4,6,0 };  //初始化整型数组

    insertion_sort(array, 10);                //函数调用

    for (int index = 0; index < 10; index++)  //遍历数组
        std::cout << array[index] << endl;

    return true;
}

三、看伪代码前自己写的插入排序

#include 
using namespace std;

bool insertion_sort(int array[], int array_length) {  //和上述代码做比较,列出不足之处
    for (int j = 1; j < array_length; ++j) {

        for (int i = j - 1; i >= 0; --i) {           //当第j个数大于第j-1个数时,应该跳出循环,不应该继续循环,去比较第j个数和第j-2、j-3、……、0个数的值
            if (array[i + 1] < array[i]) {           //不跳出循环,增加了循环次数和比较次数
                int temp = array[i + 1];             //每次满足比较条件后,都会进行数据交换,增加了交换次数
                array[i + 1] = array[i];
                array[i] = temp;
            }
        }

    }

    return true;
}

int main() {

    int array[10] = { 5,2,1,8,7,9,3,4,6,0 };

    insertion_sort(array, 10);

    for (int index = 0; index < 10; index++)
        std::cout << array[index] << endl;

    return true;
}

Original: https://www.cnblogs.com/asdzy/p/16500819.html
Author: 阿斯顿之意
Title: 2.1插入排序

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/587981/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 括号匹配

    括号匹配 题目 题目链接 代码 #include #include #include #include using namespace std; string str; stack…

    数据结构和算法 2023年6月7日
    095
  • 「学习笔记」分块与莫队

    点击查看目录 「学习笔记」分块与莫队 分块 大致思想 例题 代码 莫队 普通莫队 例题 思路 代码 带修莫队 思路 例题 思路 代码 练习题 [HNOI2010]弹飞绵羊 思路 代…

    数据结构和算法 2023年6月8日
    096
  • SSM-员工管理项目实战-CRUD-增删改查

    SSM-CRUD 一、项目简介 主界面演示 功能点 分页 数据校验 ajax Rest 风格的 URI 技术点 基础框架 – ssm( Spring + SpringM…

    数据结构和算法 2023年6月7日
    0124
  • Python <算法思想集结>之初窥基础算法

    1. 前言 &#x6570;&#x636E;&#x7ED3;&#x6784;和 &#x7B97;&#x6CD5;是程序的 2 大基础…

    数据结构和算法 2023年6月7日
    0126
  • [总结]2022/1/22

    P1心路历程 开题看到T1,直接放弃。(因为恶心的题目要求导致暴力很难写)然后看T2,一开始看到觉得很疑惑:输入数据呢???然后反复读了几遍题,才发现输入数据(或者说是需要的数据)…

    数据结构和算法 2023年6月8日
    0148
  • Dijkstra算法求最短路

    例题链接 Dijkstra算法是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。其主要特点是从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的…

    数据结构和算法 2023年6月8日
    0105
  • 【重要】LeetCode 662. 二叉树最大宽度

    题目链接 注意事项 根据满二叉树的节点编号规则:若根节点编号为 u,则其左子节点编号为 u << 1,其右节点编号为 u << 1 | 1。 一个朴素的想法…

    数据结构和算法 2023年6月8日
    093
  • 根号算法

    CHANGE LOG 2022.2.14:重构莫队部分。 2022.2.15:重构根号分治部分。 1. 根号分治 根号分治本质上是一种 按规模大小分类讨论 的思想而非分治算法。对于…

    数据结构和算法 2023年6月12日
    0127
  • Karatsuba 分治乘法

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据结构和算法 2023年6月7日
    0103
  • AtCoder Beginner Contest 224

    AtCoder Beginner Contest 224 A – Tires 思路分析: 判断最后一个字符即可。 代码如下: #include using namesp…

    数据结构和算法 2023年6月7日
    090
  • java多线程之自定义线程池

    1.背景 线程池…..大家常用…. 自己搞一个,顺便练习一下多线程编程 2.自定义线程代码 2.1.拒绝策略接口 @FunctionalInterface …

    数据结构和算法 2023年6月12日
    094
  • 《程序员漫画》| 萌新面试Google

    Hello,大家好。今天的更新有点不一样。我给大家带来了一些程序员漫画。这些都是我自己画的哦。希望大家喜欢。 今天的漫画有简约的画风,也有一些写实的风格(漂亮MM总是有特殊待遇)。…

    数据结构和算法 2023年6月7日
    0136
  • leetcode-数组中两元素的最大乘积

    给你一个整数数组 nums,请你选择数组的两个不同下标 i 和 j,使 (nums[i]-1)*(nums[j]-1) 取得最大值。 请你计算并返回该式的最大值。 &#x8…

    数据结构和算法 2023年6月8日
    093
  • 二进制状态压缩

    二进制状态压缩 取出整数n在二进制表示下的第k位: (n>>k)&1 取出整数n在二进制下的第0~k-1位 n&((1<<k)-1) &lt…

    数据结构和算法 2023年6月8日
    098
  • 服务限流原理及算法

    限流是啥?维基百科是这样解释的:在计算机网络中,频率限制被应用在控制网络接口收到或发送的请求频次,它可以被用来阻止dos攻击或者是网络爬虫。直白点说,就是限制服务收到或发出的请求频…

    数据结构和算法 2023年6月8日
    092
  • 缓存&PWA实践

    一、背景 从上一篇《前端动画实现与原理分析》,我们从 Performance 进行动画的性能分析,并根据 Performance 分析来优化动画。但,前端不仅仅是实现流畅的动画。T…

    数据结构和算法 2023年6月12日
    094
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球