排序——直接插入排序

简介: 排序——直接插入排序

排序之——直接插入排序

7715502d39094a60a04ba0a32dfb2269.gif

插入排序的基本思想

每次将一个待排序的记录按其关键字大小插入前面已经排好序的子序列,直到全部记录插入完成。

步骤(从小到大排序)

  1. 找到没有排序的元素
  2. 标记元素
  3. 将已排好序的序列中大于标记元素的往后移
  4. 插入元素

算法代码

  • 设置变量 temp 暂存标记元素
#include<iostream>usingnamespacestd;
//直接插入排序算法 voidInsertSort(intnums[],intn){
inttemp,i,j;
for(i=1;i<n;i++){
if(nums[i]<nums[i-1]){                  //若 nums[i]<nums[i-1] 即当前项比前一项小 temp=nums[i];                       //temp 暂存 nums[i] for(j=i;j>0&&nums[j-1]>temp;j--){   //检查所有已经排好序的元素 nums[j]=nums[j-1];              //将所有大于 temp 的元素往后移             }
nums[j]=temp;                       //将 temp 插入序列中         }
    }
}
//打印数组 voidprintNum(intnumbers[],intn){
for(inti=0;i<n;i++){
cout<<numbers[i]<<" ";
    }
}
intmain()
{
intnumbers[10]={3,44,5,44,47,15,36,26,27,2};
intn=sizeof(numbers)/sizeof(numbers[0]);   //数组长度 InsertSort(numbers,n);      //调用 InsertSort 函数进行插入排序 printNum(numbers,n);        //打印数组 return0;
}
  • 设置 nums[0] 暂存标记元素
#include<iostream>usingnamespacestd;
//直接插入排序算法(nums[0] 设置为哨兵替代 temp 暂存)voidInsertSort(intnums[],intn){
inti,j;
for(i=2;i<n;i++){
if(nums[i]<nums[i-1]){              //若 nums[i]<nums[i-1] 即当前项比前一项小 nums[0]=nums[i];                    //nums[0] 暂存 nums[i] for(j=i;nums[j-1]>nums[0];j--){ //检查所有已经排好序的元素 nums[j]=nums[j-1];          //将所有大于 nums[0] 的元素往后移             }
nums[j]=nums[0];                        //将 nums[0] 插入序列中         }
    }
}
//打印数组 voidprintNum(intnumbers[],intn){
for(inti=1;i<n;i++){
cout<<numbers[i]<<" ";
    }
}
intmain()
{
intnumbers[11]={0,3,44,5,44,47,15,36,26,27,2};
intn=sizeof(numbers)/sizeof(numbers[0]);   //数组长度 InsertSort(numbers,n);      //调用 InsertSort 函数进行插入排序 printNum(numbers,n);        //打印数组 return0;
}

算法性能分析

image.png


image.png

目录
相关文章
|
Python
十八、通讯录管理系统Python版(对学生的增加,删除,修改,查询,遍历所有学员信息,退出系统,六个功能的实现)
十八、通讯录管理系统Python版(对学生的增加,删除,修改,查询,遍历所有学员信息,退出系统,六个功能的实现)
1029 0
十八、通讯录管理系统Python版(对学生的增加,删除,修改,查询,遍历所有学员信息,退出系统,六个功能的实现)
|
缓存 JSON 安全
HTTP请求发送方法
HTTP请求发送方法【10月更文挑战第22天】
263 2
|
SQL 存储 关系型数据库
关系型数据库SQLserver添加新列
【8月更文挑战第4天】
496 9
|
程序员 Go 网络架构
不看就落后了,Go 1.22 中更好的http router
不看就落后了,Go 1.22 中更好的http router
|
监控 Linux
CentOS7中使用一键脚本部署Librenms网络监控系统
CentOS7中使用一键脚本部署Librenms网络监控系统
783 1
|
Docker 容器
【赵渝强老师】Docker的None网络模式
Docker容器在网络方面实现了逻辑隔离,提供了四种网络模式:bridge、container、host和none。其中,none模式下容器具有独立的网络命名空间,但不包含任何网络配置,仅能通过Local Loopback网卡(localhost或127.0.0.1)进行通信。适用于不希望容器接收任何网络流量或运行无需网络连接的特殊服务。
291 0
|
开发框架 数据可视化 前端开发
ASP.NET Core MVC+Quartz实现定时任务可视化管理页面
ASP.NET Core MVC+Quartz实现定时任务可视化管理页面
922 0
|
数据采集 Web App开发 存储
使用 Scrapy + Selenium 爬取动态渲染的页面
使用 Scrapy + Selenium 爬取动态渲染的页面
使用 Scrapy + Selenium 爬取动态渲染的页面
|
消息中间件 RocketMQ
RocketMQ消费者没有成功消费消息的问题排查
RocketMQ消费者没有成功消费消息的问题排查
2528 1
|
Java Linux Go
知识分享之Golang——精选的组件库、组件列表,各种golang组件都可找到
知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。 知识分享系列目前包含Java、Golang、Linux、Docker等等。
528 0
知识分享之Golang——精选的组件库、组件列表,各种golang组件都可找到