网站页面是自己做还是使用模板,网站织梦后台怎么做,网站建设开票内容些什么,crm客户管理系统服务电话近年来学习python的程序员愈来愈多#xff0c;有的同学选择了python培训机构#xff0c;也有的人觉得自己天赋好选择了自学不管大家怎么去学习#xff0c;在学习python基础的过程中#xff0c;肯定离不开的就是基础算法#xff0c;今天就为大家介绍几大学习中的基础算法。…
近年来学习python的程序员愈来愈多有的同学选择了python培训机构也有的人觉得自己天赋好选择了自学不管大家怎么去学习在学习python基础的过程中肯定离不开的就是基础算法今天就为大家介绍几大学习中的基础算法。
算法一快速排序算法
快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下排序n个项目要Ο(nlogn)次比较。在最坏状况下则需要Ο(n2)次比较但这种状况并不常见。
事实上快速排序通常明显比其他Ο(nlogn)算法更快因为它的内部循环(innerloop)可以在大部分的架构上很有效率地被实现出来。
快速排序使用分治法(Divideandconquer)策略来把一个串行(list)分为两个子串行(sub-lists)。
算法步骤
1.从数列中挑出一个元素称为“基准”(pivot)
2.重新排序数列所有元素比基准值小的摆放在基准前面所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。
在这个分区退出之后该基准就处于数列的中间位置。这个称为分区(partition)操作。
3.递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
递归的最底部情形是数列的大小是零或一也就是永远都已经被排序好了。虽然一直递归下去但是这个算法总会退出因为在每次的迭代(iteration)中它至少会把一个元素摆到它最后的位置去。
算法二堆排序算法
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构并同时满足堆积的性质即子结点的键值或索引总是小于(或者大于)它的父节点。
堆排序的平均时间复杂度为Ο(nlogn) 。
算法步骤
1.创建一个堆H[0…n-1]
2.把堆首(最大值)和堆尾互换
3.把堆的尺寸缩小1并调用shift_down(0),目的是把新的数组顶端数据调整到相应位置
4.重复步骤2直到堆的尺寸为1
算法三归并排序
归并排序(Mergesort台湾译作合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(DivideandConquer)的一个非常典型的应用。
算法步骤
1.申请空间使其大小为两个已经排序序列之和该空间用来存放合并后的序列
2.设定两个指针最初位置分别为两个已经排序序列的起始位置
3.比较两个指针所指向的元素选择相对小的元素放入到合并空间并移动指针到下一位置
4.重复步骤3直到某一指针达到序列尾
5.将另一序列剩下的所有元素直接复制到合并序列尾
算法四二分查找算法
二分查找算法是一种在有序数组中查找某一特定元素的搜索算法。
搜素过程从数组的中间元素开始如果中间元素正好是要查找的元素则搜素过程结束;如果某一特定元素大于或者小于中间元素则在数组大于或小于中间元素的那一半中查找而且跟开始一样从中间元素开始比较。
如果在某一步骤数组为空则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。折半搜索每次把搜索区域减少一半时间复杂度为Ο(logn) 。
算法五BFPRT(线性查找算法)
BFPRT算法解决的问题十分经典即从某n个元素的序列中选出第k大(第k小)的元素通过巧妙的分析BFPRT可以保证在最坏情况下仍为线性时间复杂度。
该算法的思想与快速排序思想相似当然为使得算法在最坏情况下依然能达到o(n)的时间复杂度五位算法作者做了精妙的处理。
算法步骤
1.将n个元素每5个一组分成n/5(上界)组。
2.取出每一组的中位数任意排序方法比如插入排序。
3.递归的调用selection算法查找上一步中所有中位数的中位数设为x偶数个中位数的情况下设定为选取中间小的一个。
4.用x来分割数组设小于等于x的个数为k大于x的个数即为n-k。
5.若ik返回x;若ik在小于x的元素中递归查找第i小的元素;若ik在大于x的元素中递归查找第i-k小的元素。
终止条件n1时返回的即是i小元素。
最后
分享一份Python的学习资料但由于篇幅有限完整文档可以扫码免费领取 1Python所有方向的学习路线新版
总结的Python爬虫和数据分析等各个方向应该学习的技术栈。 比如说爬虫这一块很多人以为学了xpath和PyQuery等几个解析库之后就精通的python爬虫其实路还有很长比如说移动端爬虫和JS逆向等等。 2Python学习视频
包含了Python入门、爬虫、数据分析和web开发的学习视频总共100多个虽然达不到大佬的程度但是精通python是没有问题的学完这些之后你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。 3100多个练手项目
我们在看视频学习的时候不能光动眼动脑不动手比较科学的学习方法是在理解之后运用它们这时候练手项目就很适合了只是里面的项目比较多水平也是参差不齐大家可以挑自己能做的项目去练练。 。