直接插入排序(C语言)[测试数据随机生成+计算程序运行时间+算法效率分析]

2023-05-16

直接插入排序,使用C语言实现。

这里为了方便测试面对大量数据时直接插入排序算法的运行时间,通过宏定义来设定生成随机数的数量(即参与排序的数据数量),利用rand()函数生成随机数,便于生成大量数据,并且通过srand()函数保证每次编译运行生成的随机数不同,使用<time.h>中的clock()来计时。

代码中,使用arr[0]临时存放待排序的那个元素(即判断是否要插入的那个数), 从arr[1]开始存放随机数。

实现代码

代码实现如下:


#include <stdio.h>
#include <stdlib.h> //生成随机数rand()
#include<time.h>   //用到clock()函数计时 ,利用srand()设置随机数种子 
#define N 10000    //宏定义,定义生成随机数的数量


//直接插入排序 
void InsertionSort(int* A, int n)
{
    int key;				//待排序的数(要插入的数)
    int i, j;
    for (j = 2; j <= n; j++)
    {
        key = A[j];
        i = j - 1;
        while (i > 0 && A[i] > key) {
            A[i + 1] = A[i];	//大于key,向右移 
            i--;
        }
        A[i + 1] = key;	        //小于key,在其后插入key 
    }
}

int main()
{
    int* arr = (int*)malloc(sizeof(int) * N);
    int i;
    clock_t startTime, endTime;//该时间计算以ms为单位 
    printf("生成的随机数如下:\n");
    srand((unsigned)time(NULL));	//设置随机数种子 (此处以时间作为参数,因为每次生成随机数的时间不同,每次生成的随机数也就不同)

    for (i = 1; i <= N; i++) {   		//arr[0]临时存放要插入的数 
        arr[i] = rand() % 10000000 + 10;      //生成10~10000010间的随机数,从arr[1]开始存放随机数    
        printf("%d ", arr[i]);
    }
    printf("\n排序后的数如下:\n");
    startTime = clock();				//计时开始
    InsertionSort(arr, N);   //调用排序函数,生成有序数组 
    endTime = clock();				//计时结束
    for (i = 1; i <= N; i++)
        printf("%d ", arr[i]);



    //计算运行时间 
    printf("\n直接插入排序-Running Time:%d\n", endTime - startTime);
    
}

运行示例:

N=10000

时间复杂度分析

        最好情况——顺序输入

                顺序排列时,需比较(n-1)次——时间复杂度为:\Theta (n)

        最坏情况 ——逆序输入

                需比较n(n-1)/2次——时间复杂度为:T(n)=n^{2}-n=\theta (n^{2})

        平均情况——时间复杂度为:\Theta (n^{2})

空间复杂度分析

        直接插入排序过程需要一个临时空间存储待排序元素,这里的arr[0]用来储存待排序元素,因此,空间复杂度为:\Theta (1)

算法稳定性

        插入排序是一种稳定的排序算法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

直接插入排序(C语言)[测试数据随机生成+计算程序运行时间+算法效率分析] 的相关文章

  • 利用IDEA创建conda环境报错问题“CondaHTTPError”的解决

    最近新学习使用IDEA xff0c 在创建conda环境时 xff0c 遇见了下面的报错 报错 xff1a CondaHTTPError HTTP 000 CONNECTION FAILED for url 根据报错查找解决方案 xff0c
  • python使用socket和tftp制作下载工具-1

    格式 xff1a 使用struct socket制作下载器 import struct from socket import def main downloadFile 61 input 请输入你要下载的文件名 xff1a 创建套接字soc
  • OpenCV的图像通道操作

    1 基本介绍 在OpenCV中 xff0c 图像通道是按照 B 通道 G 通道 R 通道的顺序存储的 在图像处理过程中 xff0c 可以根据需要对通道进行拆分和合并 2 通道拆分 对于RGB图像 xff0c 可以索引的方式或者函数的方式分别
  • Openmv+STM32F103C8T6视觉巡线小车

    Openmv巡线 机器视觉巡线处理是参考openmv官方代码 Openmv官网源代码 xff1a book openmv cc project follow lines html 根据官网视频及教程将源码注入openmv中 小车巡的是黑线
  • ros_text

    sudo apt get clean 2 sudo apt install ros noetic ros base 3 sudo apt get install ssh sudo apt get update sudo apt get in
  • OpenFlow--P4

    SDN数据平面发展历史 xff1a 传统网络数据平面 xff1a 通用转发抽象模型 xff1a RMT结构 协议无关可编程多级表架构 xff1a P4程序所包含的 xff1a PISA 协议无关交换机架构 xff08 Tofino xff0
  • python 类 文件读写与模块

    初始化类的属性 def init self name self不能省 self name 61 name 注意 xff1a 在定义类方法时 xff0c self不能省 继承 class 子类名 xff08 父类名 xff09 class e
  • python标准库

    time库 python处理时间的标准库 1 获取现在时间 time localtime 本地时间 time gmtime utc世界统一时间 北京时间比世界统一时间早8小时 2 时间戳与计时器 time time 返回自纪元以来的秒数 x
  • python之numpy库的应用

    numpy是由c语言编写的 xff0c 运行速度比python 循环快很多 在数据处理的过程中 xff0c 遇到使用 python for循环实现一些向量化 xff0c 矩阵化操作的时候 xff0c 要优先考虑用numpy numpy数组的
  • 0x00D2DCAC 处(位于 Company.exe 中)引发的异常: 0xC0000005: 读取位置 0x00000024 时发生访问冲突。

    上面的意思就是你吧值付给了不该赋给的变量 xff0c 或者说你把值付给了不能付给的变量 xff08 或者常量 xff09 xff08 1 xff09 最简单也最直接的错误可能就是scanf xff08 xff09 的问题 xff0c 我们都
  • volatile,static,const,extern等关键字

    volatile作用 Volatile关键词的第一个特性 xff1a 易变性 所谓的易变性 xff0c 在汇编层面反映出来 xff0c 就是两条语句 xff0c 下一条语句不会直接使用上一条语句对应的volatile变量的寄存器内容 xff
  • cpp基础复习

    不能返回局部变量引用 当函数调用作为左值式 xff0c 函数返回必须是引用 引用的本质是内部实现了一个指针常量 发现是引用 xff0c 转换为 int const ref 61 amp a void func int amp ref ref
  • linux系统中 --dd-- 命令详解

    一 dd命令 dd xff1a 用指定大小的块拷贝一个文件 xff0c 并在拷贝的同时进行指定的转换 注意 xff1a 指定数字的地方若以下列字符结尾 xff0c 则乘以相应的数字 xff1a b 61 512 xff1b c 61 1 x
  • English grammar

    Verb notional verb cancel establish think have meaning cannot delete in the sentences copula be am is are no meaning tra
  • 超详细Altium Designer攻略:如何从新建文件夹到手中的一块电路板

    这篇博客将使用AD17软件 xff0c 以STM32f103C8T6最小系统板为例子来详解如何得到一块属于自己的电路板 一 画原理图 打开AD17新建工程 点击文件 gt 新建 gt Project 然后在弹出的窗口点击 OK 此时已经成功
  • SW四旋翼无人机装配零件(1)

    SW四旋翼无人机装配零件 xff08 1 xff09 零件 xff1a 1 脚垫 2 数据盒 3 飞行手臂 4 上盖 5 电池盒
  • 交换机基本原理和配置

    交换机基本原理与配置 数据链路层功能数据链路层 以太网帧格式以太网工作在数据链路层以太网MAC地址 交换机的工作原理初始状态MAC地址学习广播未知数据帧接收方回应交换机实现单播通信 交换机的命令行配置 数据链路层功能 数据链路层 数据链路层
  • 边界网关协议BGP——距离矢量路由协议

    目录 动态路由的分类 1 按自治系统分为 2 按协议类型分类 BGP概念自治系统AS xff1a BGP路由协议的特点 xff1a BGP分类 xff1a BGP的路由器号 xff08 Router ID xff09 xff1a BGP工作
  • 嵌入式开发学习之硬件基础:学会看懂原理图符号

    PCB PCB xff08 Printed Circuit Board xff09 xff0c 中文名称为印制电路板 xff0c 又称印刷线路板 xff0c 是重要的电子部件 xff0c 是电子元器件的支撑体 xff0c 是电子元器件电气相
  • STM32入门教程课程简介(B站江科大自化协学习记录)

    课程简介 STM32最小系统板 43 面包板硬件平台 硬件设备 STM32面包板入门套件 Windows电脑 万用表 示波器 镊子 剪刀等 软件介绍 Keil MDK 5 24 1 是一款嵌入式软件开发工具 xff0c 它提供了一个完整的开

随机推荐

  • 一份标准的STM32工程模板都需要哪些文件?(B站江科大自化协)

    大家好 xff0c 我是烟火 目前BMS软件工程师在职 xff0c 利用自由时间 xff0c 输出一些基础知识合集 xff0c 一方面巩固 xff0c 另一方面写博客作为成长记录 人间清醒 xff1a 明明有能力可以变成更优秀的人 遇见更好
  • 在进行树莓派网络配置、安装dronekit、安装ros时我遇到的一些问题

    写得很乱 xff0c 慎看 xff01 永久改写USB口读写权限的方法 1 运行命令 xff1a lsusb vvv 2 树莓派网络获取和桌面安装 通过网线连接树莓派和电脑 xff0c 随后电脑开启无线连接 xff0c 共享网络 xff0c
  • 第一个简单的SpringBoot实现增删改查(带前端界面,超详细)

    由于网页端无法完成post之类的请求 xff0c 所以增加需要手动增加 这个页面只能进行更改和删除 xff0c 而且将源码中的端口号改为了8082 xff0c 在访问网址的时候请注意一下 点击更改按钮 更改完毕后会继续回到index htm
  • Linux ubuntu普通用户登录默认以root用户登录设置方法

    首先修改 etc lightdm lightdm conf xff0c 设置autologin user 61 root 然后修改 root profile xff0c 注释掉mesg n true xff0c 并且新添加一行 xff1a
  • 使用TortoiseGit图形化工具免Git命令远程控制仓库 - Gitee篇

    Gitee篇 GitHub篇点击这里 一 TortoiseGit提交代码 1 下载Git两个软件 xff0c 按下图顺序下载 Git传送门 xff1a Git Downloads TortoiseGit传送门 xff1a TortoiseG
  • k8s——flannel网络

    文章目录 一 Flannel简介二 Flannel网络概述三 部署 一 Flannel简介 1 当一个k8s集群创建好后一般会存在三种IP xff0c 分别是 xff1a Pod IP Node IP Cluster IP Cluster
  • STM32笔记之FreeRTOS

    文章目录 1 RTOS简介1 1 基本概念1 2 基本名词1 3 FreeRTOS 2 任务2 1 基本属性2 1 1 优先级2 1 2 任务控制块 任务堆栈任务控制块任务堆栈 2 2 状态2 3 操作 3 机制简介3 1 队列3 2 信号
  • 【算法设计与分析】1.排序算法性能分析

    相关资源下载链接 要求pdf 43 报告word 43 pre ppt 43 cpp源代码大礼包 cpp源代码 pre ppt 报告word 目录 写在前面的话 概览 算法原理 排序算法及伪代码 选择排序 选择排序伪代码 xff1a 冒泡排
  • 搭建openstack 创建实例时报错No valid host was found. There are not enough hosts available. code:500

    我的虚拟机环境是centos7 2 1511 4g4核CPU 看见网上说很多说是内存资源不足 xff0c 查看了计算节点的日志 xff0c 愣是没看出个所以然来 xff01 后来fq看了一下别国的排错 xff0c 说是可能是计算的配置文件没
  • CentOS7安装anaconda及创建虚拟环境

    anaconda安装 下载 下载地址 xff1a https mirrors aliyun com anaconda 安装 配置 安装 准备 创建目录 span class token function mkdir span p appli
  • k8s 安装pod网络插件(flannel)报错

    span class token punctuation span root 64 master k8s span class token punctuation span kubectl apply span class token op
  • shell脚本----基础命令sort-tr-uniq-cut-split-paste-eval

    文章目录 一 sort命令二 uniq命令三 tr命令四 cut命令五 split命令六 paste命令七 eval命令 一 sort命令 sort命令以行为单位对文件内容进行排序 xff0c 也可以根据不同的数据类型来排序 xff0c 比
  • 树莓派开发

    树莓派等芯片带操作系统的启动过程 C51 STM32 裸机 C直接操控底层寄存器实现相关业务 业务流程型的裸机代码 遥控灯 xff1a while 1 垃圾桶 xff1a WemosD1 LOOP 恩智浦智能车 xff1a stm32 X8
  • strtok用法详解

    字符串操作函数strtok用法 xff1a char strtok xff08 char src xff0c char split xff09 xff1b 函数参数 xff1a src xff1a 被分割的字符串 split xff1a 分
  • wget--linux命令使用说明

    xfeff xfeff wget是一个从网络上自动下载文件的自由工具 它支持HTTP xff0c HTTPS和FTP协议 xff0c 可以使用HTTP代理 所谓的自动下载是指 xff0c wget可以在用户退出系统的之后在后台执行 这意味这
  • PDU 发送短信4

    pdu 编码主要包括两个主要的部分 xff0c 一是 pdu 串的整体数据格式 xff0c 分别因为发送信息串和接收信息串而有区别 xff0c 二是 pdu 中文本部分的编码 xff0c 分别因为字符集而不同 我们也可以这样来理解这个 pd
  • Docker

    一 Docker简介 1 是什么 xff1f 解决了运行环境和配置问题软件容器 方便做持续集成并有助于整体发布的容器虚拟化技术 一次构建到处运行 2 能干嘛 linux虚拟机的缺点 xff1a 1 资源占用多 2 冗余步骤多 3 启动慢 L
  • VNC树莓派无法连接

    问题 xff1a 树莓派配置好VNC后 xff0c 第二次通过笔记本远程连接失败 xff0c 报错refused by the computer 解决方法 xff1a 在putty中输入IP地址登录树莓派 xff0c 输入vncserver
  • 如何利用GitHub发布个人网站

    如何利用gihub发布个人网站让所有人都可以浏览 发布步骤 发布步骤 进入github xff0c 点击Create repository创建一个仓库 建立自己的仓库 点击uploading an existing file上传一个已有文件
  • 直接插入排序(C语言)[测试数据随机生成+计算程序运行时间+算法效率分析]

    直接插入排序 xff0c 使用C语言实现 这里为了方便测试面对大量数据时直接插入排序算法的运行时间 xff0c 通过宏定义来设定生成随机数的数量 xff08 即参与排序的数据数量 xff09 xff0c 利用rand 函数生成随机数 xff