PHP算法之选择排序

所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算法可以节省大量的资源。在各个领域中考虑到数据的各种限制和规范,要得到一个符合实际的优秀算法,得经过大量的推理和分析。上一篇文章源码时代给我们讲了冒泡排序,接下来我们讲下选择排序

一、选择排序

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

二、代码实现

  1. <?php
  2.  
  3. /**
  4.  
  5. * 实现思路:
  6.  
  7. * 双重循环完成,外层控制轮数,取得当前值,再在内层循环中对比,记录最小的位置
  8.  
  9. */
  10.  
  11. function select_sort($arr)
  12.  
  13. {
  14.  
  15.     //  得到当前数组长度
  16.  
  17.     $len = count($arr);
  18.  
  19.    //$i 当前最小值的位置, 需要参与比较的元素
  20.  
  21.     for ($i = 0; $i < $len - 1; $i++) {
  22.  
  23.    //先假设最小的值的位置
  24.  
  25.         $p = $i;
  26.  
  27.    //$j 当前都需要和哪些元素比较,$i 后边的。
  28.  
  29.         for ($j = $i + 1; $j < $len; $j++) {
  30.  
  31.   //$arr[$p] 是 当前已知的最小值
  32.  
  33.             if ($arr[$p] > $arr[$j]) {
  34.  
  35.    //比较,发现更小的,记录下最小值的位置;并且在下次比较时,应该采用已知的最小值进行比较。
  36.  
  37.                 $p = $j;
  38.  
  39.             }
  40.  
  41.         }
  42.  
  43.    //已经确定了当前的最小值的位置,保存到$p中。
  44.  
  45.    //如果发现 最小值的位置与当前假设的位置$i不同,则位置互换即可
  46.  
  47.         if ($p != $i) {
  48.  
  49.             $tmp = $arr[$p];
  50.  
  51.             $arr[$p] = $arr[$i];
  52.  
  53.             $arr[$i] = $tmp;
  54.  
  55.         }
  56.  
  57.     }
  58.  
  59.   //返回最终结果
  60.  
  61.     return $arr;
  62.  
  63. }
  64.  
  65.  
  66.  
  67.  
  68.  
  69. $num = [1, 22, 11, 32, 3, 44, 123];
  70.  
  71.  
  72.  
  73. var_dump(select_sort($num));

复制代码

三、结果

 

猜你喜欢

转载自blog.csdn.net/weixin_42614656/article/details/81112067
今日推荐