当前位置: 首页 > 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.gsyq.cn/news/1437526.html

相关文章:

  • 阿里云旗舰级顶级代理商|年销4亿+官方可查,直享7折,稳靠不跑-路
  • 主流人工智能模型与工具开发商概览
  • 深度学习焊接缝识别 yolov8焊接缝缺陷分割代码+web部署
  • 2026年5月国内静电压合面料主流供应商排行盘点:硅胶静电吸附遮阳帘专用皮革/耐高温静电吸附硅胶革/排行一览 - 优质品牌商家
  • 值得学习的嵌入式开发材料
  • 助睿实验平台-浏览器用户行为分析与流失预测-数据加工
  • 【极域脱机指南】脱离机房老师控制--教程
  • linux 6 定时任务指令
  • 山东大学软件学院创新实训——个人博客(七)
  • AE510 Smart Kit:边缘 AI 视觉套件,让传统售货机迈入智能结算时代
  • 别再傻傻分不清了!用OpenCV+Python实战搞懂单应矩阵、本质矩阵和基础矩阵
  • 2026年南京五粮液回收服务商评测:四家机构实力对比 - 优质品牌商家
  • 云主机(华为)改密码的流水账
  • 基于PLC两电梯协同运力控制系统设计(设计源文件+万字报告+讲解)(支持资料、图片参考_降重降ai)_文章底部可以扫码
  • yolov26改进 | 添加注意力机制篇 | 添加DAttention (DAT)注意力机制二次创新C2PSA(附独家网络结构图)
  • 接收端电路
  • 给你的 Agent 上一场“砍价考试“:用 Cattle Trade 思路搭一个最小博弈测评
  • AI自进化的可能与形态:一种结构工程的推演
  • 剧本逻辑断层?角色扁平?对话生硬?,Gemini剧本辅助系统5大诊断模块+实时修复建议全披露
  • spice模型导入simulink时遇到标识符 n70ru未在 ‘definitions‘ 部分中定义
  • 2026年5月地热网片选购指南:实体厂家综合实力与选型要点解析 - 2026年企业资讯
  • 结构化编程:AI工业化编程的探索
  • 2026年q2四川聚氨酯地坪专业厂家技术能力解析:四川地坪翻新/四川室外地坪/四川无溶剂聚氨酯/优选指南 - 优质品牌商家
  • 【路径规划】基于人工势场法实现多机器人系统的群集编队控制附matlab代码
  • Go语言网络编程深度解析
  • 湖北能家校协同的播音艺考培训,武汉星干线艺术学校怎样? - myqiye
  • 江苏昱杨机械:近50年积淀的耐磨管道技术与服务解析 - 优质品牌商家
  • 2026年好用的熊猫烟花有哪些?品牌推荐与评价 - myqiye
  • 上海再生资源回收服务商评测:沪豫合与同行实力对比 - 优质品牌商家
  • 四川吊篮租赁企业实测评测:成都吊篮租赁公司/成都外墙吊篮租赁/成都工地吊篮租赁/成都建筑吊篮租赁/成都施工吊篮租赁/选择指南 - 优质品牌商家