位置: 编程技术 - 正文

php项目开发中用到的快速排序算法分析(php的项目)

编辑:rootadmin

推荐整理分享php项目开发中用到的快速排序算法分析(php的项目),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:php项目开发中用什么函数,php的项目,php开发项目实战,php项目开发中用的软件,php项目开发中用的软件,php项目开发实战入门,php项目开发中用的软件,php项目开发中用什么函数,内容如对您有帮助,希望把文章链接给更多的朋友!

本文实例讲述了php项目开发中用到的快速排序算法。分享给大家供大家参考,具体如下:

实际上在,做web开发,比较少遇到使用一些算法之类的,毕竟不是做搜索引擎,也不是写底层(比如写个类似于mysql这样的数据库,里面需要自己实现排序算法),另外,每种语言,比如java,php都或多或少已经封装好排序函数给程序员使用。比如有个共识,大家做web开发的基本都明白,业务逻辑多比较简单,不是很复杂的业务逻辑。我们作为web开发的程序员,基本是是web架构,对数据库增删查改数据,然后把数据展示在页面中,大多就是涉及性能优化,缓存等等。

学学一些常见的算法,对于实现特殊的应用还是有帮助的。比如有些时候我们依赖于数据库中order by来实现排序了,所以非常习惯直接接下交给数据库实现排序了。

接下来,我就遇到需要自己实现排序了。

&#;因为我们在实际开发中,遇到一个问题,完全需要我自己实现排序。需求如下:

在商品表里面,有一个字段是goods_price(商品价格),现在要开发一个促销价功能。促销价有个时间范围设置。在前台页面中,展示商品的时候。如果当前时间符合促销时间。就要按照促销价格执行。于是促销价就单独增加了一个字段来保存,叫做promote_price,促销时间配置信息比如什么时间,每天几点到几点之类的时间设置信息暂时不管,存储在其他字段中的,展示的时候,要用当前时间跟配置的时间进行比较。

单条商品展示的时候,就直接判断是否在促销时间内即可了。没遇到排序的问题。

而是在做商品列表页面的时候,一个这样的小细节就让我发现需求:用户可以选择商品价格按照"从高到低"也可以选择"从低到高"排序。

如果是单纯排序,以往是直接交给数据库去排序,一般我们习惯了sql中使用"order by goods_price DESC"之类的语句就能实现按照价格降序还是升序进行。

现在,不能简单就按照goods_price(商品价格)排序就ok。比如当前时间有的商品是符合促销时间的,那么促销价也是要作为排序的。

简单的 order by goods_price DESC,promote_price DESC 这种做法的话完全是不对路现在的需求。

所以呢,需要先对交给数据库的order by goods_price DESC 排序一次,列出数据。

然后遍历,看哪些商品数据是符合促销价格的。然后自己编写代码实现排序。

我初期想法是:拿到当前页的数据,里面判断每行是否符合促销价时间点

对上面的列表,因为上面的列表经过mysql排序一次后,还经过了促销价。所以还需要再次编写一个排序算法排序一次。这样就可以把促销价低的放到前面去了

其实,mysql数据库就是用c语言编写的。我理解数据库order by,它的排序也就是用c语言实现对数组的排序(关系表里面返回的的行列表就是一个二维数组)

只是,平时我们排序是交给数据库去实现了。很少自己编写,所以因为接触不多,就以为这些算法自己用不上,现在仍然需要用php语言对数据去实现排序。

php项目开发中用到的快速排序算法分析(php的项目)

数据库中的 order by a DESC,b ASC 的实现原理猜测&#;

第一种理解:先按照a字段进行排序。然后又对数据按照b字段进行排序。第二种理解:先按照a字段进行排序 ,如果遇到两个值相同的,无法确定谁在前在后时,则使用b asc来确定两个数据的先后顺序。

我是第一种理解,后来纠正,第二种理解才是对符合对的,因为这才比较符合设计的考虑点:

为什么要设计可以多个字段进行排序?难道是为了相互覆盖掉吗?比如先按照a字段排序了。某两项数据本来是一个在前一个在后,如果又按照b asc进行排序,那么可能原来这两项数据的顺序就可能错位,就是可能导致后面的排序规则应用后的结果覆盖前面的。

假设数据库排序是这样子设计的话就没实际意义了。之所以设计多个字段进行排序。就是为了解决,遇到两行中a字段的值都2,2的时候,怎么确定先后?这个时候就调用后面的排序规则对这两项数据排序。所以order by 后面的字段先后顺序不同造成的效果是不同的。

现实生活例子:假设要排名个学生的英语成绩,假设排序的时候,遇到三个学生都是分。谁排名在前呢?这个时候可以附加一种新的排序方式,对这三个学生看他们的品行分排序。这样子就好确定了。

网上的快速排序法,实现都是针对一维数组来实现的。现在我要模拟数据库中的行,也就是二维数组作为参数,并且可以指定任意字段作为排序方式。

比如从数据库中查询出一个数据列表,原封不动的对这个列表可以指定某个字段进行排序(数据库就是实现这个需求吧。当然他们要先进得些。人家牛逼些 呵呵。

具体,看下面:

总结一下我对快速排序法的理解

假设有个元素,对此进行排序。那么需要遍历多少次呢?仍然需要遍历至少次。因为确实都免不了,逐个去扫描每个元素,丢到左边,还是右边。当第一次分割之后。还要继续对分割后两边的进行重复这一步骤。当元素数量小的时候,是体会不到区别的。如果数量很大,达到上万个元素。需要进行排序,则需要涉及到算法了比如比较高矮,现实中情况,我们人可以用眼睛来看,哪个更小,然后认为的排序出来。但是计算机则不同。我们必须编写程序来告诉它要什么样的方法实现。

快速排序体现的思想是:分治法。分割成小块,逐个解决。

大体的思路描述:

1、从一堆数据里面找到一个基准的数据。按照这个数据标准分割开来。现实例子,一堆人个人,比较高矮。现在我找出一个高度的人,我按照这个人的身高,分成a,b两组。比他矮的都站到a组,比他高的都站到b(跟他一样高的随便放哪一边都可以),这样子可将个人分割成两组人。结果是,a组里面的所有人身高都要<=b组里面的人。2、对a组里面的人重复第一步。对b组里面的人也重复第一步。3、直到最后只剩下一个(因为已经没法在继续切割了),才分组。

我学到一个思想:先切成大块,然后对每个大块单独处理。最后把各个块的处理结果都合并起来。

不正确之处,欢迎指正!

代码备份:

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php排序算法总结》、《php面向对象程序设计入门教程》、《PHP数学运算技巧总结》、《php操作office文档技巧总结(包括word,excel,access,ppt)》、《PHP数组(Array)操作技巧大全》、《PHP数据结构与算法教程》、《php程序设计算法总结》、《php正则表达式用法总结》、及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

php日期操作技巧小结 本文实例总结了php日期操作技巧。分享给大家供大家参考,具体如下:1、php将表单里面获取的日期格式转换成统一的格式-9-9都统一转换成--这

php微信开发之批量生成带参数的二维码 带参数的二维码对于渠道营销推广来说是很有用的,可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送,可喜的是微信开

验证token、回复图文文本、推送消息的实用微信类php代码 本文实例为大家分享了用于验证token,回复图文、文本,向用户推送消息等功能的微信类,具体代码如下phpclassWechat{private$data=array();publicfunction__construct($

标签: php的项目

本文链接地址:https://www.jiuchutong.com/biancheng/297143.html 转载请保留说明!

上一篇:php函数传值的引用传递注意事项分析(php函数传值的引用是什么)

下一篇:php日期操作技巧小结(php年月日时间代码)

  • 坏账准备计入营业外支出还是资产减值损失
  • 实际成本法和计划成本法的会计分录
  • 对公账户的钱能转到私人账户吗
  • 无偿捐赠设备该如何做账务处理呢?
  • 收到外商投入资金
  • 收不回来应收账款会计分录
  • 公允价值变动税务处理
  • 这个月没有进项开了发票可怎么办
  • 企业报税没报怎么办
  • 上个月开的增值税发票这个月可以作废吗
  • 普通发票查不到信息怎么办
  • 地价计入房产原值乘70%
  • 生产企业出口货物必须以什么为计税依据计算免抵退税额
  • 公司终止的时间是进行注销登记生效后
  • 股东其他应付款可以转为实收资本文本格式
  • 个体餐饮店交税吗
  • 补记以前年度收入分录
  • 打开游戏时总是出现需要新应用打开此MS
  • win10如何获得管理员权限修改文件
  • win1020h2更新0x800f081f
  • 法人车无偿给公司使用合法吗
  • Windows11预览体验
  • php替换指定内容
  • windows 10 版本 21h1
  • 临时 文件夹
  • 发生坏账账务处理
  • 其他应付款转营业外收入需要交增值税吗
  • 个税扣除项怎么扣除
  • 企业向股东发放现金股利会引起
  • uniapp微信小程序上传文件
  • 公司分立土地涉税问题
  • vue多入口文件
  • 利润表其他综合收益的税后净额计算公式
  • Mybatis+Servlet+Mysql 整合的一个小项目:对初学者非常友好,有助于初学者很快的上手Java Web
  • linux 高并发网络编程
  • 零基础舞蹈培训
  • YOLOv5|YOLOv7|YOLOv8改各种IoU损失函数:YOLOv8涨点Trick,改进添加SIoU损失函数、EIoU损失函数、GIoU损失函数、α-IoU损失函数
  • chage -l命令
  • Discus X 3 门户改造熊掌号网页教程
  • 中国互联网创业成功的年轻人
  • 登记注册车辆登记英语
  • 期权分为哪几种
  • 混合销售行为的例子
  • 递延所得税资产和所得税费用的关系
  • 母子公司关联交易规定
  • 发票冲红视频教程
  • 进出口货物收发货人报关注册登记证书
  • 暂估入库的会计分录怎么写
  • 存货增加使经营活动现金净流量减少该怎么办
  • 实际报销金额
  • 2018年所得税率
  • 在建工程抵押贷款的用途为在建工程继续建造所需资金
  • 土地需要摊销嘛?
  • 环保局检查锅炉房都查什么
  • 备品和备件的定义
  • esxi6.7克隆
  • linux修改yum
  • 任务管理器边框怎么设置
  • winadserv.exe - winadserv是什么进程
  • .exe是什么文件
  • nhaspx.exe是什么
  • Windows文件夹共享权限不足
  • win10右下角弹出全屏截图
  • winspool.drv病毒
  • 为什么电脑显示windows10即将终止服务
  • linux0.01编译
  • windows 8 开发者预览版
  • win7系统如何
  • win7如何卸载打印机驱动程序
  • grid sheet
  • UNITY开发工程师
  • 了不起的女孩
  • android 点击按钮如果数据库有数据就更新,没有就创建
  • python数字类型及操作
  • javascriptcom
  • js确认框选择取消时退出程序怎么设置
  • 电子税务局网页版登录入口官网
  • 税控盘怎么申请领发票
  • 福建电子税务局登录入口
  • 奔驰g500落地多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设