php 排序算法

冒泡排序

原文章:php冒泡算法

function test_sort($arr, $asc = true, $isstr = false) {
  if (empty($arr)) {
    return false;
  }
  $count = count($arr);
  if ($count <= 0) {
    return false;
  }
  for ($i = 0; $i < $count; $i++) {
    for ($j = 0; $j < $count - $i - 1; $j++) {
      $str1 = $arr[$j];
      $str2 = $arr[$j + 1];
      if ($isstr) {
        $str1 = (string) $str1;
        $str2 = (string) $str2;
        //仅比较第一个字符的ASCII码值
        $result = strcmp($str1, $str2);
        $result = $result > 0 ? true : false;
      } else {
        //数字比字符串大
        $result = $str1 > $str2;
      }
      if ($asc && $result) {
        $result = true; //正序
      } elseif (!$asc && !$result) {
        $result = true; //倒叙
      } else {
        $result = false; //不排序
      }
      if ($result) {
        $change_str = $str1;
        $arr[$j] = $str2;
        $arr[$j + 1] = $change_str;
      } else {
        $arr[$j] = $str1;
      }
    }
  }
  return $arr;
}

快速排序

原文章:php快速排序

function quickSort($data) {
  if (!is_array($data)) {
    return false;
  }
  $arr = $data;
  $left = [];
  $right = [];
  $baseitem = $arr[0];
  unset($arr[0]);
  foreach ($arr as $key => $value) {
    if ($baseitem <= $value) {
      $left[] = $value;
    } else {
      $right[] = $value;
    }
  }
  if (is_array($left) && count($left) >= 2) {
    $left = quickSort($left);
  }
  if (is_array($right) && count($right) >= 2) {
    $right = quickSort($right);
  }
  return array_merge($left, [$baseitem], $right);
}

欢迎关注公众号: lsswear

你可能感兴趣的:(php,算法,php)