当前位置: 代码迷 >> 综合 >> PHP第六天 数组选择排序
  详细解决方案

PHP第六天 数组选择排序

热度:104   发布时间:2023-10-11 03:14:27.0

 

      1. 选择排序算法

原理:

遍历一个数组,在此过程中,找出数组中的最大值及其位置。然后将该最大值的单元,跟数组的最后一个单元“交换位置”,这样进行一趟,数组中的最大值就一定放在最后位置了。

将上述过程中剩余的数据继续遍历一次,并做同样的事情,则此时剩余部分的最大值也能够放在剩余部分的最后位置——对整体而言就是倒数第二的位置。

依此类推。。。。。。。进行若干次,就排好了。

图示:

有数组:$arr1 = array(18,  22,  12,   15,  23,  9);

原始数组

18

22

12

15

23

9

第1趟之后

18

22

12

15

9

23

第2趟之后

18

9

12

15

22

23

第3趟之后

15

9

12

18

22

23

第4趟之后

12

9

15

18

22

23

第5趟之后

9

12

15

18

22

23

规律总结:

  1. 要进行从头到尾找出其中的最大值(及下标),并进行交换的趟数为$n-1,$n为数组长度
  2. 每一趟要做的事情是:a)找最大值,吧)并将该最大值跟这一趟的最后一项进行交换;
  3. 每一趟要从中找最大值的数据个数都比前一趟少1,其中第一趟有$n个。

 

<?php
/*
规律总结:
1,要进行从头到尾找出其中的最大值(及下标),并进行交换的趟数为$n-1,$n为数组长度
2,每一趟要做的事情是:a)找最大值,吧)并将该最大值跟这一趟的最后一项进行交换;
每一趟要从中找最大值的数据个数都比前一趟少1,其中第一趟有$n个。*/
$arr1 = array(18,  22,  12,   15,  23,  9);
//implode("字符", $数组):将该数组的所有项用给定字符“连接起来”
echo "<br>交换前:" . implode(',' , $arr1);
$n = count($arr1);
//控制进行从中找最大值的趟数:
for($i = 0; $i < $n - 1; $i++)
{//a)找最大值(及下标)://这个循环是在其中某一趟中从前(若干)个数据中找最大值$max = $arr1[0];	//取出这些数据中的第一项,并该变量作为最大值$max_key = 0;		//对应的下标for($k = 0; $k < $n - $i;  $k++){if($arr1[$k] > $max){$max = $arr1[$k];$max_key = $k;}}//b)交换:$temp = $arr1[$max_key];	//$max_key为这一趟找出来的最大值的下标$arr1[$max_key] = $arr1[$n-1-$i];	//$n-1-$i为这一趟最后一项的下标$arr1[$n-1-$i] = $temp;
}
echo "<br>交换后:" . implode(',' , $arr1);$arr1 = array(18,  22,  12,   15,  23,  9);
$n = count($arr1);
for($i=0;$i<$n-1;$i++) //交换的趟数为n-1
{$max = $arr1[0]; //假装定义最大值为第一个$max_key = 0;for($k=0;$k<$n-$i;$k++) {if($arr1[$k]>$max){$max = $arr1[$k];$max_key = $k;}}$temp = $arr1[$max_key];$arr1[$max_key] = $arr1[$n-1-$i];$arr1[$n-1-$i] = $temp;
}
print_r($arr1);

 

  相关解决方案