0

0

php语言实现的7种根本的排序方法

php中文网

php中文网

发布时间:2016-06-13 12:27:50

|

1064人浏览过

|

来源于php中文网

原创

php语言实现的7种基本的排序方法

今天总结了一下常用的7种排序方法,并用php语言实现。

Kuwebs企业网站管理系统3.1.5 UTF8
Kuwebs企业网站管理系统3.1.5 UTF8

酷纬企业网站管理系统Kuwebs是酷纬信息开发的为企业网站提供解决方案而开发的营销型网站系统。在线留言模块、常见问题模块、友情链接模块。前台采用DIV+CSS,遵循SEO标准。 1.支持中文、英文两种版本,后台可以在不同的环境下编辑中英文。 3.程序和界面分离,提供通用的PHP标准语法字段供前台调用,可以为不同的页面设置不同的风格。 5.支持google地图生成、自定义标题、自定义关键词、自定义描

下载
  1. 直接插入排序

     1 /* 2  *    直接插入排序,插入排序的思想是:当前插入位置之前的元素有序, 3  *    若插入当前位置的元素比有序元素最后一个元素大,则什么也不做, 4  *    否则在有序序列中找到插入的位置,并插入 5  */ 6 function insertSort($arr) { 7     $len = count($arr);     8     for($i = 1; $i < $len; $i++) { 9         if($arr[$i-1] > $arr[i]) {10             for($j = $i - 1;$j >= 0; $j-- ) {11                 $tmp = $arr[$j+1];12                 if($tmp < $arr[$j]) {13                     $arr[$j+1] = $arr[$j];14                     $arr[$j] = $tmp;15                 }else{16                     break;17                 }                    18             }    19         }20     }    21     return $arr;22 }
  2. 冒泡排序

     1 /* 2     冒泡排序,冒泡排序思想:进行 n-1 趟冒泡排序, 每趟两两比较调整最大值到数组(子数组)末尾 3 */ 4 function bubbleSort($arr) { 5     $len = count($arr); 6     for($i = 1; $i < $len; $i++) { 7         for($j = 0; $j < $len-$i; $j++) { 8             if($arr[$j] > $arr[$j+1]) { 9                 $tmp = $arr[$j+1];10                 $arr[$j+1] = $arr[$j];11                 $arr[$j] = $tmp;12             }13         }14     }15     return $arr;16 }    
  3. 简单选择排序

     1 /* 2     简单选择排序, 简单排序思想:从数组第一个元素开始依次确定从小到大的元素 3 */ 4 function selectSort($arr) { 5     $len = count($arr); 6     for($i = 0; $i < $len; $i++) { 7         $k = $i; 8         for($j = $i+1; $j < $len; $j++) { 9             if($arr[$k] > $arr[$j]) {10                 $k = $j;11             }12         }13         if($k != $i) {14             $tmp = $arr[$i];15             $arr[$i] = $arr[$k];16             $arr[$k] = $tmp;17         }18     }19     return $arr;20 }
  4. 希尔排序

     1 /* 2     希尔排序,希尔排序原理:将数组按指定步长分隔成若干子序列,然后分别对子序列进行排序(在这是直接) 3 */ 4 function shellSort($arr) { 5     $len = count($arr); 6     $k = floor($len/2); 7     while($k > 0) { 8         for($i = 0; $i < $k; $i++) { 9             for($j = $i; $j < $len, ($j + $k) < $len; $j = $j + $k) {10                 if($arr[$j] > $arr[$j+$k]) {11                     $tmp = $arr[$j+$k];12                     $arr[$j+$k] = $arr[$j];13                     $arr[$j] = $tmp;14                 }15             }16         }17         $k = floor($k/2);18     }19     return $arr;20 }
  5. 快速排序

     1 /* 2  *    快速排序,快排思想:通过一趟排序将待排的记录分为两个独立的部分,其中一部分的记录的关键字均不大于 3  *    另一部分记录的关键字,然后再分别对这两部分记录继续进行快速排序,以达到整个序列有序,具体做法需要 4  *    每趟排序设置一个标准关键字和分别指向头一个记录的关键字和最后一个记录的关键字的指针。 5  *    quickSort($arr, 0, count($arr) -1); 6  */ 7 function quickSort(&$arr,$low,$high) { 8     if($low < $high) { 9         $i = $low;10         $j = $high;11         $primary = $arr[$low];12         while($i < $j) {13             while($i < $j && $arr[$j] >= $primary) {14                 $j--;15             }16             if($i < $j) {17                 $arr[$i++] = $arr[$j];18             }19             while($i < $j && $arr[$i] <= $primary) {20                 $i++;21             }22             if($i < $j) {23                 $arr[$j--] = $arr[$i];24             }25         }26         $arr[$i] = $primary;27         quickSort($arr, $low, $i-1);28         quickSort($arr, $i+1, $high);29     }30 }
  6. 堆排序

     1 /* 2     堆排序 3 */ 4  5 // 调整子堆的为大根堆的过程,$s为子堆的根的位置,$m为堆最后一个元素位置 6 function heapAdjust(&$arr, $s, $m) { 7     $tmp = $arr[$s]; 8     // 在调整为大根堆的过程中可能会影响左子堆或右子堆 9     // for循环的作用是要保证子堆也是大根堆10     for($j = 2*$s + 1; $j <= $m; $j = 2*$j + 1) {11         // 找到根节点的左右孩子中的最大者,然后用这个最大者与根节点比较,12         // 若大则进行调整,否则符合大根堆的 特点跳出循环    13         if($j < $m && $arr[$j] < $arr[$j+1]) {14             $j++;15         }16         if($tmp >= $arr[$j] ) {17             break;18         }19         $arr[$s] = $arr[$j];20         $s = $j;21     }22     $arr[$s] = $tmp;23 }24 25 // 堆排序26 function heapSort($arr) {27     $len = count($arr);28     // 依次从子堆开始调整堆为大根堆29     for($i = floor($len/2-1); $i >= 0; $i--) {30         heapAdjust($arr, $i, $len-1);31     }32     // 依次把根节点调换至最后一个位置,再次调整堆为大根堆,找到次最大值,33     // 依次类推得到一个有序数组34     for($n = $len-1; $n > 0; $n--) {35         $tmp = $arr[$n];36         $arr[$n] = $arr[0];37         $arr[0] = $tmp;38         heapAdjust($arr, 0, $n-1);39     }40     return $arr;41 }
  7. 归并排序

     1 /* 2     归并排序,这里实现的是两路归并 3 */ 4 // 分别将有序的$arr1[s..m]、$arr2[m+1..n]归并为有序的$arr2[s..n] 5 function Merge(&$arr1, &$arr2, $s, $m, $n) { 6     for($k = $s,$i = $s, $j = $m+1; $i <= $m && $j <= $n; $k++) { 7         if($arr1[$i]<$arr1[$j]) { 8             $arr2[$k] = $arr1[$i++]; 9         }else {10             $arr2[$k] = $arr1[$j++];11         }12     }13     if($i <= $m) {14         for(; $i <= $m; $i++) {15             $arr2[$k++] = $arr1[$i];16         }17     } else if($j <= $n) {18         for(; $j <= $n; $j++) {19             $arr2[$k++] = $arr1[$j];20         }21     }22 }23 24 // 递归形式的两路归并25 function MSort(&$arr1, &$arr2, $s, $t) {26     if($s == $t) {27         $arr2[$s] = $arr1[$s];28     }else {29         $m = floor(($s+$t)/2);30         $tmp_arr = array();31         MSort($arr1, $tmp_arr, $s, $m);32         MSort($arr1, $tmp_arr, $m+1, $t);33         Merge($tmp_arr, $arr2, $s, $m, $t);34     }35 }36 37 // 对一位数组$arr[0..n-1]中的元素进行两路归并38 function mergeSort($arr) {39     $len = count($arr);40     MSort($arr, $arr, 0, $len-1);41     return $arr;42 }

    使用经验

    1. 若排序的记录数目n较小时,可以采用直接插入排序和简单选择排序,当记录本身信息量较大时,用简单选择排序方法较好。
    2. 若待排序记录按关键字基本有序,适合采用直接插入排序和冒泡排序。
    3. 若n值较大时,可以采用快速排序、堆排序和归并排序。另外快速排序被认为是内部排序方法中最好的方法。

相关文章

PHP怎么输出arraylist_命令行下输出格式错乱咋调【操作】

php数组怎么排除特定键名项_php数组键名排除筛选【步骤】

php数组下标是负数有效吗_php负数下标使用规则【技巧】

php二维转一维用array_map行吗_phparray_map二维降维用法【教程】

php二维转一维用正则辅助行吗_php正则提取二维降维法【技巧】

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

上一篇:礼拜五了啦啦啦啦-LAMP+PHP‘s OOP 下一篇:PHP之简略实现MVC框架

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
包子漫画网页版入口与全集阅读指南_正版免费漫画快速访问方法
包子漫画网页版入口与全集阅读指南_正版免费漫画快速访问方法

本专题汇总了包子漫画官网和网页版入口,提供最新章节抢先看方法、正版免费阅读指南,以及稳定访问方式,帮助用户快速直达包子漫画页面,无广告畅享全集漫画内容。

47

2026.02.10

MC.JS网页版快速畅玩指南_MC.JS官网在线入口及免安装体验方法
MC.JS网页版快速畅玩指南_MC.JS官网在线入口及免安装体验方法

本专题汇总了MC.JS官网入口和网页版快速畅玩方法,提供免安装访问、不同版本(1.8.8、1.12.8)在线体验指南,以及正版网页端操作说明,帮助玩家轻松进入MC.JS世界,实现即时畅玩与高效体验。

34

2026.02.10

谷歌邮箱网页版登录与注册全指南_Gmail账号快速访问与安全操作教程
谷歌邮箱网页版登录与注册全指南_Gmail账号快速访问与安全操作教程

本专题汇总了谷歌邮箱网页版的最新登录入口和注册方法,详细提供官方账号快速访问方式、网页版操作教程及安全登录技巧,帮助用户轻松管理Gmail邮箱账户,实现高效、安全的邮箱使用体验。

25

2026.02.10

铁路12306订票与退改全攻略_高效购票与座位选取技巧
铁路12306订票与退改全攻略_高效购票与座位选取技巧

本专题全面汇总铁路12306订票、退票、改签及候补订单操作技巧,提供车厢座位分布参考、抢票攻略和高铁安检注意事项,帮助新手用户快速掌握高效购票与退改流程,提高出行效率和体验。

31

2026.02.10

TensorFlow2深度学习模型实战与优化
TensorFlow2深度学习模型实战与优化

本专题面向 AI 与数据科学开发者,系统讲解 TensorFlow 2 框架下深度学习模型的构建、训练、调优与部署。内容包括神经网络基础、卷积神经网络、循环神经网络、优化算法及模型性能提升技巧。通过实战项目演示,帮助开发者掌握从模型设计到上线的完整流程。

0

2026.02.10

Vue3组合式API与组件开发实战
Vue3组合式API与组件开发实战

本专题讲解 Vue 3 组合式 API 的核心概念与应用技巧,深入分析响应式系统、生命周期管理、组件设计与复用策略。通过完整项目案例,指导前端开发者实现高性能、结构清晰的 Vue 应用,提升开发效率与代码可维护性。

4

2026.02.10

Go语言微服务架构与gRPC实战
Go语言微服务架构与gRPC实战

本专题面向有 Go 基础的开发者,系统讲解微服务架构设计与 gRPC 的高效应用。内容涵盖服务拆分、RPC 通信、负载均衡、错误处理、服务注册与发现等关键技术。通过实战案例,帮助开发者搭建高性能、可扩展的 Go 微服务系统。

1

2026.02.10

React 18状态管理与Hooks高级实践
React 18状态管理与Hooks高级实践

本专题专注于 React 18 的高级开发技术,详细讲解 useState、useEffect、useReducer、useContext 等 Hooks 的使用技巧,以及 Redux、Zustand 等状态管理工具的集成与优化方法。通过真实案例,帮助前端开发者构建可维护、性能优良的现代 React 应用。

4

2026.02.10

Node.js后端开发与Express框架实践
Node.js后端开发与Express框架实践

本专题针对初中级 Node.js 开发者,系统讲解如何使用 Express 框架搭建高性能后端服务。内容包括路由设计、中间件开发、数据库集成、API 安全与异常处理,以及 RESTful API 的设计与优化。通过实际项目演示,帮助开发者快速掌握 Node.js 后端开发流程。

2

2026.02.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

相关下载

更多

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
前端系列快速入门课程
前端系列快速入门课程

共4课时 | 0.4万人学习

AngularJS教程
AngularJS教程

共24课时 | 3.5万人学习

CSS3实现按钮特效视频教程
CSS3实现按钮特效视频教程

共15课时 | 3.3万人学习

最新文章

更多
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号