排序算法

快速排序

快速排序是十分常用的高效率的算法,其思想是:先选一个标尺,用它把整个队列过一遍筛选,以保证左边的元素都不大于它,其右边都不小于它

function quickSort($arr){
//获取数组长度
$length = count($arr);
//判断长度是否需要继续二分比较
if($length <= 1){
return $arr
}
// 定义基准元素
$base = $arr[0];
//定义两个空数组,用于存放和基准元素比较后的结果
$left = [];
$right = [];
//遍历数组
for ($i=1;$i<$length;i++){
//和基准元素作比较
if ($arr[i] >$base){
$right[] = $arr[$i];
}else{
$left[] = $arr[$i];
}
}
//然后递归分别处理left和right
$left = quickSort($left);
$right = quickSort($right);
//合并
return array_merge($left,[$base],$right)
}

冒泡排序

思路:法如其名,就像冒泡一样,每次从数组中冒出一个最大的数。

比如:2,4,1

第一次冒出4:2,1,4

第二次冒出2:1,2,4

function    bubbleSort($arr){
// 获取数组长度
$length = count($arr);
// 第一层循环控制冒泡轮次
for($i=0; $i < $length-1; $i++) {
// 内层循环控制从第0个键值和后一个键值比较,每次冒出一个最大的数
for($k=0; $k < $length-$i; $k++) {
if($arr[$k] > $arr[$k+1]){
$tmp = $arr[$k+1];
$arr[$k+1] = $arr[$k];
$arr[$k] = $tmp;
}
}
}
return $arr;
}

选择排序

思路:每次选择一个相应的元素,然后将其放到指定的位置

function selectSort($arr){
//实现思路
//双重循环完成,外层控制轮数,当前的最小值,内层控制比较次数
//获取长度
$length = count($arr);
for($i=0;$i<$length-1;$i++){
//假设最小值的位置
$p = $i;
//使用假设的最小值和其他值比较,找到当前的最小值
for ($j=$i+1;$j<$length;$j++){
//$arr[$p] 是已知的当前最小值
//判断当前循环值和已知最小值的比较,当发下最小的值时记录下键,并进行下一次比较
if($arr[$p]>$arr[$j]){
$p = $j;//比假设的值更小
}
}
//通过内部for循环找到了当前最小值的key,并保存在$p中
//判断日光当前$p中的键和假设的最小值的键不一致增将其互换
if ($p !=$i){
$tmp = $arr[$p];
$arr[$p] = $arr[$i];
$arr[$i] = $tmp
}
}
//返回最终结果
return $arr
}

最新文章

  1. JavaScript变量作用域
  2. python 2.7 和3.0input区别
  3. ubuntu下修改apache2.4的rewrite
  4. Python中的属性管理
  5. .NET 下各种Resource的读取方式
  6. C#在线更新程序[下载程序、解压缩程序、控制台程序]
  7. 【转】SQL Server sql_variant 类型的比较
  8. eclipse运行内存不足解决办法
  9. 【Unity3D自我记录】解决NGUI通过问题触发事件点
  10. QTP脚本--应用参数化来测试某个输入框
  11. @Transactional问题记录下
  12. jsp的Get 与 SET的区别
  13. gradient的几点认识转载
  14. C#连接oracle数据库步骤
  15. 聊一聊顺序消息(RocketMQ顺序消息的实现机制)
  16. [P2921][USACO08DEC]在农场万圣节Trick or Treat on the Farm (记忆化搜索/DP?,Tarjan?)
  17. Redis的数据结构之字符串
  18. volatile关键字的作用
  19. 5.3Python函数(三)
  20. lemon spj无效编译器解决方法

热门文章

  1. 关于jpa的Specification自定义函数,实现oracle的decode;以及如何在静态方法中调用注入的service
  2. ExpandableListView 可折叠的下拉listview
  3. Hive数据导入/导出
  4. Hbase 统计表行数的3种方式总结
  5. celery详解
  6. 脱离脚手架来配置、学习 webpack4.x (二)基础搭建loader 配置 css、scss
  7. [Advanced Python] 12 - Interview Quiz
  8. [Spark] 04 - HBase
  9. [MySQL] 02- Optimisation solutions
  10. RxSwift 中的调度器