0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

为什么每个程序员都需要学习算法?看了你就明白了

C语言编程基础 来源:未知 作者:李建兵 2018-03-16 11:06 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

算法程序员

不懂算法的程序员

算法的力量

算法是计算机科学领域最重要的基石之一,但却受到了一些程序员的冷落。

许多小伙伴看到一些公司在招聘时要求的编程语言五花八门就产生了一种误解,认为学计算机就是学各种编程语言,或者认为,学习最新的语言、技术、标准就是最好的铺路方法。

其实大家都被这些公司和培训机构误导了。

编程语言虽然该学,但是学习计算机算法和理论更重要,因为计算机语言和开发平台日新月异,但万变不离其宗的是那些算法和理论。

例如数据结构、算法、编译原理、计算机体系结构、关系型数据库原理等等。

这些基础课程更可以称之为为“内功”,而新的语言、技术、标准则更像是“外功”。

整天赶时髦的人最后只懂得招式,没有功力,是不可能成为高手的。

“程序员是否必须会算法”。

这是一个充满争议的问题,虽然并不像“生存还是毁灭”之类的选择那样艰难而沉重,但也绝不是一个轻松的话题。

很多人对算法的理解太片面,很多人觉得只有名字里包含“XX算法”之类的东西才是算法。

而我们认为算法的本质是解决问题,只要是能解决问题的代码就是算法。

初学

读书计划的第一步是选择书籍,这里首推算法导论,这本书深入浅出,全面地介绍了计算机算法。对每一个算法的分析既易于理解又十分有趣,并保持了数学严谨性。

程序员需要知道的5大基础实用算法

算法一:快速排序

快速排序是由东尼·霍尔所发展的一种排序算法。

在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。

快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。

算法二:堆排序算法

堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。

堆排序的平均时间复杂度为Ο(nlogn) 。

算法三:归并排序

归并排序(Merge sort,***译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

算法四:二分查找算法

二分查找算法是一种在有序数组中查找某一特定元素的搜索算法。

搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜 素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。

如果在某一步骤数组 为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。折半搜索每次把搜索区域减少一半,时间复杂度为Ο(logn) 。

算法五:BFPRT(线性查找算法)

BFPRT算法解决的问题十分经典,即从某n个元素的序列中选出第k大(第k小)的元素,通过巧妙的分 析,BFPRT可以保证在最坏情况下仍为线性时间复杂度。该算法的思想与快速排序思想相似,当然,为使得算法在最坏情况下,依然能达到o(n)的时间复杂 度,五位算法作者做了精妙的处理。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 算法
    +关注

    关注

    23

    文章

    4803

    浏览量

    98531
  • 程序员
    +关注

    关注

    4

    文章

    956

    浏览量

    31005

原文标题:为什么每个程序员都需要学习算法?

文章出处:【微信号:xx-cyy,微信公众号:C语言编程基础】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    算法工程师需要具备哪些技能?

    算法工程师需要掌握一系列跨学科的技能,涵盖数学基础、编程能力、算法理论、工程实践以及业务理解等多个方面。 以下是具体技能及学习建议: 线性代数核心内容:矩阵运算、特征值分解、向量空间等
    发表于 02-27 10:53

    堆栈的原理揭秘

    概念就被提了出来。其中“局部变量”从软件的角度指出了某些变量只需要在特定的时间段【生存期】存在于单片机的内存中即可满足程序正确运行的要求,而“堆栈”则从硬件的角度为程序员控制局部变量的生存期提供
    发表于 01-23 07:08

    学习单片机快速方法

    那么多钱去养那些优化代码的程序员还不如买一套新的硬件。我现在也是用C语言编程的。 汇编几乎不用。知道怎么使用开发软件之后,就可以按照学习板的教程进行编程练习。练习要分模块进行,比如流水灯模块,
    发表于 01-14 07:42

    如何成为编程高手

    的缩进编排,变量的命名规则要始终保持一致。大家知道如何排除代码中错误,却往往忽视对注释的排错。注释是程序的一个重要组成部分,它可以使的代码更容易理解,而如果代码已经清楚地表达
    发表于 12-29 06:57

    芯盾时代SDP助力企业应对核心机密泄露危机

    无论程序员、文案、财务,无论你想撸代码、出海报、做报表,各式各样的AI总能满足的需求,让的工作更加轻松。
    的头像 发表于 12-26 11:49 845次阅读

    大理的AI野心藏不住了——风花雪月中千名程序员探讨人工智能

    2025 年12月4日至6日第二届CCF程序员大会暨大理人工智能与应用国际开发者大会在大理圆满落幕。
    的头像 发表于 12-24 17:45 892次阅读
    大理的AI野心藏不住了——风花雪月中千名<b class='flag-5'>程序员</b>探讨人工智能

    程序员最常见谎言

    了。 28我已经测试过了,这个功能没问题,可以上线。 29别担心,这个问题很快就能解决。 30代码快写完了,已经完成 90% 。 希望大家对程序员多一些容忍以及谅解! 各位程序员
    发表于 12-10 08:24

    广州邮科模拟量光端机,到底是啥神器?一篇文章给你讲明白

    是不是在工厂、电站或者监控项目里,经常听到“模拟量信号”这个词?比如压力、温度、流量这些连续变化的数据,要把它们传得远、传得稳,可真不是件简单事。老式的布线方式又麻烦又容易受干扰,头对吧
    的头像 发表于 10-30 09:38 414次阅读
    广州邮科模拟量光端机,到底是啥神器?一篇文章给你讲<b class='flag-5'>明白</b>!

    MCU200T的SPI FLASH驱动程序的单条指令设计

    这里每次验证,需要在验证前不断重复导入我们所需要的输入验证文件,未免过于繁琐,这时我们可以将验证文件导入到掉电不丢失的外挂SPIFLASH上,以便下次上板调试。 我们这里先设计 动程序
    发表于 10-28 08:01

    奔赴热AI,码力全开!Talkweb House@1024程序员日系列活动圆满收官

    1024程序员日”系列活动至此划上了一个圆满句号。本届1024程序员节以“AI构建世界,智能引领未来”为主题,广邀技术大咖、产业领袖、企业代表与全球开发者齐聚星城
    的头像 发表于 10-27 18:59 952次阅读
    奔赴热AI,码力全开!Talkweb House@1024<b class='flag-5'>程序员</b>日系列活动圆满收官

    开鸿智谷“以赛促学、以赛选才”|1024程序员节暨开源鸿蒙构建大会圆满落幕!

    10月24日,由开鸿智谷联合主办的长沙1024程序员节暨开源鸿蒙构建大会在长沙圆满落幕。本次活动以“湘聚长沙,共赴热AI”为主题,通过技术分享与实战竞赛相结合的方式,着力培养“开源鸿蒙+AI”领域
    的头像 发表于 10-27 17:58 849次阅读
    开鸿智谷“以赛促学、以赛选才”|1024<b class='flag-5'>程序员</b>节暨开源鸿蒙构建大会圆满落幕!

    如何在机器视觉中部署深度学习神经网络

    人士而言往往难以理解,人们也常常误以为需要扎实的编程技能才能真正掌握并合理使用这项技术。事实上,这种印象忽视该技术为机器视觉(乃至生产自动化)带来的潜力,因为深度学习并非只属于计算机科学家或
    的头像 发表于 09-10 17:38 1048次阅读
    如何在机器视觉中部署深度<b class='flag-5'>学习</b>神经网络

    PID控制算法学习笔记资料

    用于新手学习PID控制算法
    发表于 08-12 16:22 7次下载

    程序设计与数据结构

    的地址)出发,采用推导的方式,深入浅出的分析广大C程序员学习和开发中遇到的难点。 2. 从方法论的高度对C语言在数据结构和算法方面的应用进行了深入讲解和阐述。 3. 讲解了绝大多
    发表于 05-13 16:45

    【「零基础开发AI Agent」阅读体验】+ 入门篇学习

    10.AI Agent开发模式走向零代码可视化模式(需要我们程序员对此有着观念上的转变),但是掌握编程技术,有助于AI Agent的开发进阶
    发表于 05-02 09:26