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

考研数据结构——C语言实现插入排序

插入排序是一种简单直观的比较排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place(原地排序),不需要额外的存储空间。插入排序对于小数据集或基本有序的数据集来说非常高效。

插入排序的步骤:

  1. 将数组分为已排序和未排序两部分:初始时,已排序部分只包含第一个元素(或者为空),未排序部分包含其余元素。

  2. 从未排序部分取出元素:每次从未排序部分取出第一个元素。

  3. 在已排序部分找到插入位置:将取出的元素与已排序部分的元素进行比较,从后向前扫描。

  4. 插入元素:找到合适的位置后,将取出的元素插入到该位置。

  5. 重复以上步骤:直到未排序部分为空,此时整个数组已经排序完成。

插入排序的特点:

  1. 稳定性:插入排序是稳定的排序算法,即相等的元素在排序后仍然保持其原始顺序。

  2. 时间复杂度

    • 最好情况:当数组已经是有序的,时间复杂度为O(n)。
    • 平均情况:时间复杂度为O(n^2)。
    • 最坏情况:当数组是逆序的,时间复杂度为O(n^2)。
  3. 空间复杂度:插入排序是原地排序,不需要额外的存储空间,空间复杂度为O(1)。

  4. 适用场景:对于小数据集或基本有序的数据集,插入排序是一个不错的选择。对于大数据集,插入排序可能不是最优的选择。

插入排序虽然在最坏情况下的时间复杂度较高,但由于其简单和稳定的特性,它在实际应用中仍然有其价值。

#include <stdio.h>
#include <stdlib.h>int main() {int a[] = { 12,4,132,55,46,232,789,1,0,98,523,666 };int n = sizeof(a) / sizeof(a[0]);int i, j, k;for (i = 0; i < n - 1; i++) {for (j = i + 1; j >0 ; j--) {if (a[j] < a[j - 1]) {k = a[j - 1];a[j - 1] = a[j];a[j] = k;}elsebreak;}}for (i = 0; i < n; i++) {printf("%d", a[i]);printf(" ");}return 0;
}

结果如下:

http://www.lryc.cn/news/448382.html

相关文章:

  • 苍穹外卖学习笔记(十三)
  • ​如果没有pos信息,只有一些近景的照片,可以用​编辑重建大师进行建模吗?​
  • 智能感知,主动防御:移动云态势感知为政企安全护航
  • 论文笔记(四十六)RobotGPT: Robot Manipulation Learning From ChatGPT
  • docker - 镜像操作(拉取、查看、删除)
  • 如何选择数据库架构
  • Mysql高级篇(中)——锁机制
  • JavaWeb图书借阅系统
  • 文档矫正算法:DocTr++
  • Vxe UI vue vxe-table vxe-grid 单元格与表尾单元格如何格式化数据
  • 【百日算法计划】:每日一题,见证成长(021)
  • 数据恢复篇:如何恢复几年前删除的照片
  • 前端注释规范
  • uniapp踩坑 tabbar页面数据刷新了但视图没有更新
  • WebAssembly与WebGPU:游戏开发的新时代
  • SAP B1 认证考试习题 - 解析版(二)
  • 《Ubuntu20.04环境下的ROS进阶学习7》
  • 免费视频无损压缩工具+预览视频生成工具
  • OIDC9-OIDC集成登录功能(SpringBoot3.0)
  • 使用Vue.extend( ) 模仿 elementui 创建一个类似 message 消息提示框
  • ansible部署二进制mysql 8
  • 【2023工业3D异常检测文献】基于混合融合的多模态工业异常检测方法Multi-3D-Memory (M3DM)
  • 基于微信小程序的宿舍报修系统的设计与实现(lw+演示+源码+运行)
  • 前端练习总结(1)
  • 计算机网络自顶向下(1)---网络基础
  • Pandas -----------------------基础知识(五)
  • RabbitMQ 高级特性——重试机制
  • 每天一道面试题(20):锁的发生原因和避免措施
  • 2024淘宝双11活动,收下这份必买好物推荐清单
  • vue-cli,element-plus,axios,proxy