基础算法总结

1.反转数组

 

$count = count($list);

  $left = 0;

  $right = $count - 1;

  while ($left < $right) {

  $temp = $list[$left];

  $list[$left++] = $list[$right];

  $list[$right--] = $temp;

}

 

2.冒泡排序

 

 

function bubbleSort($arr){

  // 获取数组长度
  $length = count($arr);

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

  return $arr;
}

 

 

3.快速排序

 

快速排序是十分常用的高效率的算法,其思想是:先选一个标尺,用它把整个队列过一遍筛选,以保证其左边的元素都不大于它,其右边的元素都不小与它,然后左边和右边的元素在进行递归操作,直至元素只剩一个为止

 

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);
  
}

 

4.选择排序

 
 
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; }

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值