登录

PHP各种排序

最常用的几种PHP排序方法。嗯,塑料PHPer搬运工,搬运一些常见的PHP方法

冒泡排序

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。

它重复地走访过要排序的元素列,一次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。

这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

冒泡排序算法的原理如下:

比较相邻的元素。如果第一个比第二个大,就交换他们两个。

对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

针对所有的元素重复以上的步骤,除了最后一个。

持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

function bubbleSort($arr){
    $count = count($arr);
    for ($i=0; $i < $count; $i++) { 
      for ($k=0; $k <$count-1 ; $k++) { 
        if($arr[$i]<$arr[$k]){
          $temp = $arr[$k];
          $arr[$k] = $arr[$i];
          $arr[$i] = $temp;
        }
      }
    }
    return $arr;
}

选择排序

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。

function selectSort($arr){
    $count = count($arr);
    for ($i=0; $i <$count -1 ; $i++) { 
      $min = $i;
      for ($k=0; $k < $count ; $k++) { 
        if($arr[$min]>$arr[$k]){
          $min = $k;
        }
      }
      if($min != $i){
        $temp = $arr[$min];
        $arr[$min] = $arr[$i];
        $arr[$i] = $temp;
      }
    }
    return $arr;
}

快速排序

设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。

一趟快速排序的算法是:

1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;

2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];

3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换;

4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;

5)重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。找到符合条件的值,进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。

function quickSort($arr){
  $length = count($arr);
  if($length <= 1){
    return $arr;
  }
  $base_num = $arr[0];
  $left_array = array();
  $right_array = array();
  for ($i=1; $i < $length; $i++) { 
    if($base_num > $arr[$i]){
      $left_array[] = $arr[$i];
    }else{
      $right_array[] = $arr[$i]; 
    }
  }
  $left_array = quickSort($left_array);
  $right_array = quickSort($right_array);

  return array_merge($left_array, array($base_num), $right_array);
}

插入排序

有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。

插入排序的基本思想是:每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。

function insertSort($arr){
  $count = count($arr);
  for ($i=1; $i<$count; $i++) { 
    $temp = $arr[$i];
    for ($k=$i-1; $k >= 0 ; $k--) { 
      if($temp < $arr[$k]){
        $arr[$k+1] = $arr[$k];
        $arr[$k] = $temp;
      }else{
        break;
      }
    }
  }
  return $arr;
}

大佬请绕路,纯属记笔记水文,小弟先撤。。。

选择赏赐方式:

×

多少都是心意,感谢大家

选择分享方式:

×

扫一扫分享到微信朋友圈

标签: 算法

本文标题:PHP各种排序

本文地址:https://www.zbpnice.cn/post/171.html

温馨提示:文章内容系作者个人观点,不代表柏平博客对观点赞同或支持。

版权声明: 本文为原创文章,创建于6年前 (2018-07-29),版权归 柏平 所有,欢迎分享本文,转载请保留出处!

评论列表 :共有3人吐槽, 7070人围观

速卖通视频定制
速卖通视频定制  3年前 (2021-07-17)  板凳回复
写的很详细,谢谢分享!
头条
头条  6年前 (2018-08-14)  沙发回复
文章不错非常喜欢
柏平
柏平  6年前 (2018-08-15) 1层回复
@头条 谢谢支持 face_01

发表评论: