当前位置: 首页 > article >正文

考研要求掌握的C语言程度(插入排序)

插入排序是啥类型的排序

插入类型的

插入排序经常用在啥类型场景下

用在有序序列下的基础上插入新数据

时间复杂度分析

如果是有序的基础下,最好的时间复杂度是O(n);

普通情况下是O(n^2)

插入排序的原理是啥?

插入排序就是把待插入数据讲已排好顺序的树进行循环比较然后放在合适位置

例如:

已排序好的树有1  3  6;

待排序数是5,把5依次和上面数据进行比较,最终确定放在3后面

即1 3 5 6

代码实战

本次代码实现有从后往前循环比较


 //插入排序,本次实现从小到大排序
 void insert_sort(int nums[],int len)
 {
    int i=0,j=0;
    for(i=1;i<len;++i)//外层循环控制待排序数
    {
        int insertVal = nums[i];//用来临时存储带插入的数据
        //从待插入数据的位置的前一个开始往前面循环比较
        for(j=i-1;j>=0 && nums[j]>insertVal;--j)//前面的数据大于待插入数据,进入函数
        {
            nums[j+1]=nums[j];        
        }
        nums[j+1] = insertVal;//插入待排序数据
    }
 }
 

可执行代码如下

#include<stdio.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>
 
void swap(int &a,int &b)
{
    int tmp=a;
    a=b;
    b=tmp;
}
 
 
void rangnums(int nums[],int len)
{
    srand(time(NULL));
    //初始化数组
    printf("初始化数组:");
    for(int i=0;i<len;i++)
    {
        nums[i]=rand()%100+1;
        printf("%d ",nums[i]);
    }
    puts("");
}
 
void print(int a[],int len)
{
    for(int i=0;i<len;i++)
    {
        printf("%d ",a[i]);
    }
    puts("");
}

 //插入排序
 void insert_sort(int nums[],int len)
 {
    int i=0,j=0;
    for(i=1;i<len;++i)
    {
        int insertVal = nums[i];//用来临时存储带插入的数据
        for(j=i-1;j>=0 && nums[j]>insertVal;--j)
        {
            nums[j+1]=nums[j];
        }
        nums[j+1] = insertVal;//插入待排序数据
    }
 }
 

int main()
{
    int a[10]={92 ,79 ,49, 59, 86 ,38, 94, 64, 92, 3};
    rangnums(a,10);
    insert_sort(a,10);
    print(a,10);
    
}

【注】数据结构不懂一定要动手画图


http://www.kler.cn/a/380102.html

相关文章:

  • 鸿蒙HarmonyOS开发:给应用添加基础类型通知和进度条类型通知(API 12)
  • Hugging Face魔塔使用
  • 架构系列---高并发
  • 信息学科平台设计与实现:Spring Boot技术详解
  • ABeam 德硕 | 共探AI时代人才新生态,ABeam旗下德硕管理咨询(上海)有限公司荣膺2024杰出雇主!
  • 小程序分包看完这一篇秒懂
  • 15分钟学 Go 第 36 天:Go的反射基础
  • 【K8S系列】Kubernetes 中 Service 的流量不均匀问题【已解决】
  • 江协科技STM32学习- P34 I2C通信外设
  • 统信UOS适配C#
  • 华为配置WLAN跨VLAN的三层漫游示例
  • LeetCode 热题100(七)【链表】(1)
  • 友思特应用 | FantoVision边缘计算:多模态传感+AI算法=新型非接触式医疗设备
  • Kafka日志记录
  • centos7之LVS-TUNNEL模式
  • 【Linux】安装 SQL Server 命令行工具 mssql-tools18(Ubuntu 22.04)
  • word及Excel常见功能使用
  • 使用 Spring Boot 搭建 WebSocket 服务器实现多客户端连接
  • 系统安全架构
  • 用于nodejs的开源违禁词检测工具 JavaScript node-word-detection
  • 【远程项目管理】Focalboard如何在Windows环境使用Docker快速部署
  • 力扣题目解析--最长公共前缀
  • 【MATLAB源码-第280期】基于matlab的MIMO系统16QAM调制ZF算法与SD(球形译码)的误码率曲线对比分析。
  • Windows 笔记本WiFi 功能消失解决办法
  • 通讯学徒学习日记
  • Airflow快速迁移Connections和Variables配置