当前位置: 首页 > 后端技术 > PHP

PHP排序算法选择排序

时间:2023-03-29 16:39:18 PHP

2.选择排序原理  :在一个数字列表中,选择最小的数字,与第一个位置的数字交换。然后在剩余的数中找出最小的数与第二位的数交换,以此类推,直到倒数第二个数与最后一个数比较。(以下按升序排列,即从小到大排列)  例子:$arr=array(6,3,8,2,9,1);  第一轮:  第一次比较,在(3,8,2,9,1)中比较第一个数6和3,6更大,当前最小数为3,位置为1   第二次比较是最小数3和(3,8在8,2,9,1中比较),3比较小,当前最小数是3,位置是1   第三次比较,最小数3与(3,8,2,9,1)中的2比较,3比较大,当前最小数为2,位置为3   第四次比较,最小数2比较with9in(3,8,2,9,1),2小,当前最小数为2,位置为3   的第五次比较,最小数2与(3,8,2,9,1),2较大,当前最小数为1,位置为5  第一轮比较完成后,确定最小数为1,小于第一个数字6,交换位置上的数字,交换后的结果为138296  总结:第一轮比较可以确定第一个位置的最小值。 第二轮:   第一轮比较,在(8,2,9,6)中3与8比较,3小,当前最小数为3,位置为1   的第二次比较,3和(8,2,9,6)中的2进行比较,3比较大,当前最小数为2,位置为3  第三次比较,2和(8中的9进行比较,2,9,6),2为小,当前最小数为2,位置为3  第四次比较,2与(8,2,9,6)中的6进行比较,2为小,当前最小数为2,位置为3  第二轮比较完成后,确定最小数为2,小于第二轮数3,位置中的数为交换。交换后结果为128396  总结:第二轮比较可以确定第二个仓位的最小值。至此,前两个位置的数字已经确定。 第三轮:  第一次比较,8与(3,9,6)中的3比较,8比较大,当前最小数为3,位置为3   第二次比较,3与(3,9,9,6),3小,当前最小数为3,位置为3  第三次比较,6与(3,9,6)中的6比较,3小,当前最小数为3,位置为3   经过三轮比较,确定最小数为3,小于第三个数8,交换位置中的数。交换后结果为123896  总结:第三轮比较可以确定第三个仓位的最小值。至此,前三位的数字已经确定。第四轮:  第一次比较,8与(9,6)中的9比较,8小,当前最小数为8,位置为3  第二次比较,8与(9,6)中6比较,8大,当前最小数为6,位置为5  第四轮比较完成后,确定最小数为6,小于第四个数8.交换该位置的数,交换后的结果为123698  总结:第四轮比较,可以确定第四个位置的最小值。至此,前四位的数字已经确定。第五轮:  第一次比较,9和8比较,9大,当前最小数为8,位置为5第五轮比较完成后,确定最小数为8,比第五个数字9小,交换位置中的数字,交换后结果为123689  总结:在第五轮比较中,可以确定第五个位置的最小值。至此,前5位的数字已经确定。结合以上五轮比较,每轮比较可以确定一个位置。对于N个数,比较N-1轮就可以确定N个位置的数,因为N-1个位置是确定的,最后一个位置也是确定的。向上。示例代码:选择排序实现思路双循环完成,外层控制轮数,当前最小值。内层控制的比较次数for($i=0;$i$arr[$j]){$p=$j;}}if($p!=$i){$tmp=$arr[$p];$arr[$p]=$arr[$i];$arr[$i]=$tmp;}}var_dump($arr);