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

数据结构 算法解释,排序、查找

程序设计 = 数据结构 + 算法

算法:对数据操作的流程步骤

算法的设计

1. 正确性

语法正确

合法的输入能得到合理的结果

对非法的输入,给出满足要求的规格说明

对精心选择,甚至刁难的测试都能正常运行,结果正确

2. 可读性,便于交流,阅读,理解,高内聚 低耦合

3. 健壮性,输入非法数据,能进行相应的处理,而不是产生异常

4. 高效率 (时间复杂度)

5. 低存储(空间复杂度)

算法时间复杂度

执行这个算法所花时间的度量

将数据量增长和时间增长用函数表示出来,这个函数就叫做时间复杂度

一般用大O表示法:O(n) ------时间复杂度是关于数据n的一个函数

随着n的增肌,时间复杂度增长较慢的算法时间复杂度低

时间复杂度的计算规则

1. 用常数1取代运行时间中的所有加法常数

2. 在修改后的运行函数中,只保留最高阶项

3. 如果最高阶存在且系数不是1,则去除这个项相乘的常数

例:

命名 内核命名 get_max_num() 驼峰命名 getMaxNum() 均为动宾

排序和查找算法:

1. 冒泡排序 2.选择排序 3.插入排序 4. 快速排序 5. 二分查找

排序算法

1. 排序思想

2. 时间复杂度

3. 排序算法稳定性:在待排序列中,出现了两个相同数据,经过排序,

这两个相同数据的相对位置没有发送变化,该排序算法就是一个稳定的排序算法。

冒泡排序

相邻两两元素进行比较,将较大值向后移,一趟完成,将最大值存储在最后位置。

选择排序

将待排位置的数据和后面的数据依次进行比较,将较小的数据存入到待排位置;

经过一趟排序,待排位置存储最小值

插入排序

将待排的数据插入到一个已有序的序列中,确保每次插入后该序列任然有序。

希尔排序

将待排序列分成若干个子序列,分别对这若干个子序列进行插入排序。

int bin_find(int *a, int len, int data) { int begin = 0; int end = len-1; int cnt = 0; while (begin <= end) { cnt++; int mid = (begin + end) / 2; if (data == a[mid]) { printf("find %d\n", a[mid]); return 0; } else if (data > a[mid]) { begin = mid + 1; } else if (data < a[mid]) { end = mid - 1; } } printf("cnt = %d\n", cnt); printf("Not find\n"); return -1; } return 0; }
快速排序

选取一个基准值,从两头向中间依次和基准值比较,将比基准值大的存在后面的序列,比基准值小的存在前面的序列;

经过一趟排序,将基准值存入合适的位置。并且以基准值为界,划分左右序列继续按照以上方式排序。

void quick_sort(int *a, int begin, int end) { if (begin >= end) { return ; } int i = begin; int j = end; int key = a[i]; while (i < j) { while (i < j && a[j] >= key) { j--; } a[i] = a[j]; while (i < j && a[i] <= key) { i++; } a[j] = a[i]; } a[i] = key; quick_sort(a, begin, i-1); quick_sort(a, i+1, end); }
二分查找/折半查找

前提条件:必须是一个有序的序列

时间复杂度:O(logn)

int bin_find(int *a, int len, int data) { int begin = 0; int end = len-1; int cnt = 0; while (begin <= end) { cnt++; int mid = (begin + end) / 2; if (data == a[mid]) { printf("find %d\n", a[mid]); return 0; } else if (data > a[mid]) { begin = mid + 1; } else if (data < a[mid]) { end = mid - 1; } } printf("cnt = %d\n", cnt); printf("Not find\n"); return -1; } return 0; }
http://www.jsqmd.com/news/926195/

相关文章:

  • 【元器件专题】MOS管内部结构
  • LEGO框架:空间加速器设计的动态数据流优化
  • 2026年Q2炉渣钢渣供应商评测:上阳建材适配性分析 - 优质品牌商家
  • 2026年汽车静电阻隔面料实测评测:四家企业横向对比 - 优质品牌商家
  • 阿里云旗舰级顶级代理商|年销4亿+官方可查,直享7折,稳靠不跑-路
  • 主流人工智能模型与工具开发商概览
  • 别再死记硬背了!用C语言手写一个test_and_set(),彻底搞懂操作系统硬件锁
  • 书匠策AI:你的课程论文救急神器,用过的人都说“真香“
  • 乐高wedo《套圈游戏》
  • AMP算法实战:用Python从零实现压缩感知信号恢复(附完整代码与避坑指南)
  • 实战落地+数据可视化:6月最新重庆优质GEO优化服务商榜单深度测评 - 品牌官
  • Codex+Vscode+Remote ssh+ 服务器自定义第三方API配置保姆级教程
  • 2026年苏州防水维修标杆机构专业市场分析与全场景渗漏治理选型适配指南 专业防水公司排名推荐(2026年5月防水补漏最新TOP权威排名) - 鼎壹万修缮说
  • 最新Python爬虫实战(多线程爬虫篇)——案例26:多线程爬取斗罗大陆3龙王传说小说批量保存到txt(附上完整爬虫代码)
  • 深度学习焊接缝识别 yolov8焊接缝缺陷分割代码+web部署
  • 2026年5月秦皇岛酒店之选:为何万怡酒店脱颖而出 - 2026年企业资讯
  • 基于MATLAB的simulink汽车防抱死仿真模型,汽车制动防抱死模型ABS仿真模型
  • 集团首都公报:放飞炬人集团内政署批准起草《出口劳务法案》《劳务产能调整和AIQI技艺法案》
  • 2026年5月国内静电压合面料主流供应商排行盘点:硅胶静电吸附遮阳帘专用皮革/耐高温静电吸附硅胶革/排行一览 - 优质品牌商家
  • RTOS学习笔记,二、多任务管理
  • 【案例分享】我从失败中学到的架构教训
  • 值得学习的嵌入式开发材料
  • 2026年当下河北地区镶铜铸铁闸门采购指南:实力厂家深度解析 - 2026年企业资讯
  • 2026年当前秦皇岛婚礼酒店哪个好?深度解析秦皇岛万怡酒店婚宴实力 - 2026年企业资讯
  • 助睿实验平台-浏览器用户行为分析与流失预测-数据加工
  • 2026年q2四川无机涂料外墙厂家排行及选型推荐:无机涂料多少钱一平方/无机涂料工程专用/实力盘点 - 优质品牌商家
  • Spark中Hbase的伪分布式模式配置
  • 2026年Q2长春K金回收选择推荐:避坑实操要点 - 优质品牌商家
  • 别再只调OpenCV参数了!从AD、Census到SGM,手把手教你用Python实现双目立体匹配核心算法
  • linux 6 定时任务指令