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

    文章

    4437

    浏览量

    90550
  • 程序员
    +关注

    关注

    4

    文章

    931

    浏览量

    29553

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

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

收藏 人收藏

    评论

    相关推荐

    薪资高、青春饭,是不是程序员=青楼?

    进入裁员阶段。所以我们程序员要做的只能是与时俱进。 适者生存,程序员亦是如此 顺应时代发展,是我们必须跟紧的。就好比技术更迭我们就要学习更新。而现在我们程序员最好的赛道出路在哪? 目前
    发表于 03-06 21:32

    感觉我国的程序员前景一片灰暗,是这样吗?

    程序员也分为好几等,在现在看来大部分的Android、Java、前端等等开发。已经看不到希望,很多人都在边缘挣扎;刚看到一位Android开发者,过完年回公司就通知被裁;可见每年都会有很多互联网
    发表于 02-20 20:52

    1月18号“纯鸿蒙”千帆启航,程序员预备!

    的用户。从而导致Android、ios等市场减少,开发从业者会逐渐减少。而我们程序员现在最好的办法就是进军“鸿蒙圈”,鸿蒙生态不仅包括鸿蒙应用层,还有鸿蒙生态圈:智能家居、车载、家电、数码、硬件等等开发
    发表于 01-16 22:13

    【飞腾派4G版免费试用】鸿蒙系统的各种报错,让程序员差点.............

    开源这一块,但是大部分的程序员还是停留在生计问题,有时间有精力投入到给开源添砖加瓦的还是比较少,这或许就是开源与程序员的矛盾。 8、好多指令缺,用起来完全不习惯,有好多东西需要自己去
    发表于 12-13 15:09

    程序员表白程序

    电子发烧友网站提供《程序员表白程序.rar》资料免费下载
    发表于 11-21 10:41 0次下载
    <b class='flag-5'>程序员</b>表白<b class='flag-5'>程序</b>

    程序员节 | 今年程序员们都想要的礼物竟然是……

    原文标题:程序员节 | 今年程序员们都想要的礼物竟然是…… 文章出处:【微信公众号:微软科技】欢迎添加关注!文章转载请注明出处。
    的头像 发表于 10-24 10:35 245次阅读
    <b class='flag-5'>程序员</b>节 | 今年<b class='flag-5'>程序员</b>们都想要的礼物竟然是……

    不可错过!人工神经网络算法、PID算法、Python人工智能学习等资料包分享(附源代码)

    先了解生物神经元模型。 >>>点击查看下载资料 2.Python编程:从入门到实践 如何学习编写第一个程序每个程序员都有不同的故事。我还是个孩子时就开始
    发表于 09-13 16:41

    AS950 ARM应用库程序员指南

    ARM开发套件(ADS)配合使用。 每个代码模块提供以下内容: ·全面的文档·示例和测试应用程序位于两个子目录中:-src包含C例程和源文件-tst文件包含测试数据文件(例如,DC
    发表于 08-18 07:31

    移植ARM DHCP服务器版本1程序员指南

    这本书由ARM DHCP服务器服务器软件提供, 假定ARM DHCP服务器移植源可以作为参考, 也假设您可以访问程序员的 C 和 ARM 组装语言指南。 本程序员指南是为有经验的内嵌系统程序员编写
    发表于 08-18 06:46

    霓虹灯程序员指南

    如果您对ARM技术完全陌生,请阅读Cortex-A系列程序员指南,了解有关ARM架构配置文件和一般编程指南的信息。 ·霓虹灯技术是ARM高级单指令多数据(SIMD)扩展的实现。 ·霓虹灯单元是执行
    发表于 08-17 06:32

    ARMv8-A霓虹灯程序员指南

    程序员,如固件、设备驱动程序或android内核开发人员•希望为基于Arm的目标设备优化库或应用程序程序员•非常热衷于Raspberry Pi爱好者本指南涵盖了如何开始使用Neon,
    发表于 08-08 07:25

    ARM系统跟踪Macrocell程序员模型架构规范1.1版

    ARM 系统跟踪大型电池程序员示范建筑规格V1.1 建筑规格
    发表于 08-02 10:11

    61.[程序员小飞]如何在3分钟内安装好数据库MySql和Navicat,简单又易懂

    程序员
    充八万
    发布于 :2023年07月20日 09:16:19

    打开 LNS 程序员参考

    打开 LNS 程序员参考
    发表于 07-04 19:50 0次下载
    打开 LNS <b class='flag-5'>程序员</b>参考