php之编程思想(选择排序)
定义:
选择排序(selection sort):是一种简单直观的排序法。原理是每次从待排序的数组中取出最小(或最大)的一个元素,
存放在序列的起始位置,知道全部待排序的数据排序完。
算法思路:
- 假设第一个元素为最小元素,记下下标。
- 寻找右侧剩余的元素,如果有更小的,从新记下最新的下标。
- 如果第一次记录的最小元素被更改,则交换两个元素。
- 往右重复以上步骤,直到元素本身是最后一个。
代码演示:
依次根据序号注释查看,如果不懂嵌套for循环原理,请查看本人的冒泡排序有详解;
$arr = array(1,2,8,4,9,5,3,10,13,12); $len = count($arr); //1:确定交换多少次,一次只能找到一个最小的,找数组长度对应的次数 for($i = 0; $i < $len; $i++){ //2:我们假设,数组的第一个值为最小,赋给最小值变量 $min = $i; for($j = $i+1; $j < $len; $j++){ //3:数组的最小值和第二个比较,如果不是最小,则把第二个赋给最小值变量 if($arr[$min] > $arr[$j]){ $min = $j; } } //4:如果最小值变量已经改变,那么就交换最小值到数组第一个 if($min != $i){ $temp = $arr[$i]; $arr[$i] = $arr[$min]; $arr[$min] = $temp; } } print_r($arr);
输出结果:
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 8 [6] => 9 [7] => 10 [8] => 12 [9] => 13 )
但是选择排序是稳定的排序法,比如序列(5,5,3)第一次就将第二一个5与3交换,导致第一个5 挪到第二个5后面。
但是选择排序比冒泡排序来得更简单直观。
如果还有什么不懂,欢迎留言咨询!
我是程序媛willa。

浙公网安备 33010602011771号