所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算法可以节省大量的资源。在各个领域中考虑到数据的各种限制和规范,要得到一个符合实际的优秀算法,得经过大量的推理和分析。上一篇文章源码时代给我们讲了冒泡排序,接下来我们讲下选择排序
一、选择排序
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。
二、代码实现
- <?php
- /**
- * 实现思路:
- * 双重循环完成,外层控制轮数,取得当前值,再在内层循环中对比,记录最小的位置
- */
- function select_sort($arr)
- {
- // 得到当前数组长度
- $len = count($arr);
- //$i 当前最小值的位置, 需要参与比较的元素
- for ($i = 0; $i < $len - 1; $i++) {
- //先假设最小的值的位置
- $p = $i;
- //$j 当前都需要和哪些元素比较,$i 后边的。
- for ($j = $i + 1; $j < $len; $j++) {
- //$arr[$p] 是 当前已知的最小值
- if ($arr[$p] > $arr[$j]) {
- //比较,发现更小的,记录下最小值的位置;并且在下次比较时,应该采用已知的最小值进行比较。
- $p = $j;
- }
- }
- //已经确定了当前的最小值的位置,保存到$p中。
- //如果发现 最小值的位置与当前假设的位置$i不同,则位置互换即可
- if ($p != $i) {
- $tmp = $arr[$p];
- $arr[$p] = $arr[$i];
- $arr[$i] = $tmp;
- }
- }
- //返回最终结果
- return $arr;
- }
- $num = [1, 22, 11, 32, 3, 44, 123];
- var_dump(select_sort($num));
复制代码
三、结果