摘要:二选择排序原理在一列数字中,选出最小数与第一个位置的数交换。至此确定了前两个位置上的数。示例代码选择排序实现思路双重循环完成,外层控制轮数,当前的最小值。
二、选择排序
原理: 在一列数字中,选出最小数与第一个位置的数交换。然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。(以下都是升序排列,即从小到大排列)
举例说明: $arr = array(6, 3, 8, 2, 9, 1);
第一轮:
第一次比较, 第一个数 6 与(3, 8, 2, 9, 1)中 3 比较,6大,当前最小数为3,位置为 1
第二次比较, 最小数字 3 与(3, 8, 2, 9, 1)中 8 比较,3小,当前最小数为3,位置为 1
第三次比较, 最小数字 3 与(3, 8, 2, 9, 1)中 2 比较,3大,当前最小数为2,位置为 3
第四次比较, 最小数字 2 与(3, 8, 2, 9, 1)中 9 比较,2小,当前最小数为2,位置为 3
第五次比较, 最小数字 2 与(3, 8, 2, 9, 1)中 1 比较,2大,当前最小数为1,位置为 5
第一轮比较完成后,确定最小数为1,小于第一个数6,交换位置上的数,交换后结果为 1 3 8 2 9 6
总结:第一轮比较,可以确定第一个位置的最小值。
第二轮:
第一次比较, 3与(8, 2, 9, 6)中 8 比较,3小,当前最小数为3,位置为 1
第二次比较, 3与(8, 2, 9, 6)中 2 比较,3大,当前最小数为2,位置为 3
第三次比较, 2与(8, 2, 9, 6)中 9 比较,2小,当前最小数为2,位置为 3
第四次比较, 2与(8, 2, 9, 6)中 6 比较,2小,当前最小数为2,位置为 3
第二轮比较完成后,确定最小数为2,小于第二个数3,交换位置上的数,交换后结果为 1 2 8 3 9 6
总结:第二轮比较,可以确定第二个位置的最小值。至此确定了前两个位置上的数。
第三轮:
第一次比较, 8与( 3, 9, 6)中 3 比较,8大,当前最小数为3,位置为3
第二次比较, 3与( 3, 9, 6)中 9 比较,3小,当前最小数为3,位置为3
第三次比较, 6与( 3, 9, 6)中 6 比较,3小,当前最小数为3,位置为3
第三轮比较完成后,确定最小数为3,小于第三个数8,交换位置上的数,交换后结果为 1 2 3 8 9 6
总结:第三轮比较,可以确定第三个位置的最小值。至此确定了前三个位置上的数。
第四轮:
第一次比较, 8与( 9, 6)中 9 比较,8小,当前最小数为8,位置为3
第二次比较, 8与( 9, 6)中 6 比较,8大,当前最小数为6,位置为5
第四轮比较完成后,确定最小数为6,小于第四个数8交换位置上的数,交换后结果为 1 2 3 6 9 8
总结:第四轮比较,可以确定第四个个位置的最小值。至此确定了前四个位置上的数。
第五轮:
第一次比较, 9与 8 比较,9大,当前最小数为8,位置为5
第五轮比较完成后,确定最小数为8,小于第五个数9,交换位置上的数,交换后结果为 1 2 3 6 8 9
总结:第五轮比较,可以确定第五个个位置的最小值。至此确定了前5个位置上的数。
综合以上五轮比较,每一轮比较都可以确定一个位置,对于N个数,比较N-1轮可以确定N个位置上的数,因为确定了N-1个位置,最后一个位置也就确定了。
示例代码:
选择排序 实现思路 双重循环完成,外层控制轮数,当前的最小值。内层 控制的比较次数
for ($i=0; $i < count($arr)-1; $i++) { //$i 当前最小值的位置, 需要参与比较的元素
$p = $i;//先假设最小的值的位置 for ($j=$i+1; $j < count($arr); $j++) { //$j 当前都需要和哪些元素比较,$i 后边的。 if($arr[$p] > $arr[$j]) { $p = $j; } } if($p != $i) { $tmp = $arr[$p]; $arr[$p] = $arr[$i]; $arr[$i] = $tmp; }
}
var_dump($arr);
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/29230.html
摘要:数据结构常见数据结构数组是最简单而且应用最广泛的数据结构特征使用连续内存空间来存储存放相同类型或着衍生类型的元素数组比较特别,可以存放八种数据类型通过下标来访问集合特征保存不重复的元素字典特征就是关联数组,以形式存储栈,与队列相似特征存储数 数据结构 常见数据结构 Array 数组是 最简单 而且 应用最广泛 的数据结构 特征: 1、使用连续内存空间来存储 2、存放相同类型或着衍生类型...
摘要:而在证明算法是正确的基础上,第二步就是分析算法的时间复杂度。算法的时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程度上能很好反映出算法的优劣与否。 showImg(https://segmentfault.com/img/remote/1460000016451712?w=800&h=341); 前言 虽然工作中,你觉得自己并没有涉及到算法这方面的东西,但是算法是程序的...
摘要:描述选择最小的元素由左到右依次交换顺序即完成元素由小到大的排序。选择排序重点在于选择最小元素。选择排序每次循环都能排好一个元素,因此需要交换的次数等于元素个数。 描述 选择最小的元素由左到右依次交换顺序即完成元素由小到大的排序。选择排序重点在于选择最小元素。以下是较为详细的描述: 首先,把所有的数据循环一遍找到最小的数,然后和第一个数交换位置。 然后从第二个数起,一直循环到最后一个,...
摘要:排序严格来说不算数据结构,更应该归于算法一类,因为数据结构指的是数据与数据之间的关系,排序参与其中,更多的是让数据状态发生了改变。 排序严格来说不算数据结构,更应该归于算法一类,因为数据结构指的是数据与数据之间的关系,排序参与其中,更多的是让数据状态发生了改变。于是,我们开始用PHP来聊聊算法。 引子 其实有一句话说的是不错的,不必重复造轮子,所以下面我将引用别人的文章作为本文的引文,...
摘要:实现代码判断参数是否是一个数组递归出口数组长度为,直接返回数组数组元素有多个,则定义两个数组循环遍历数组,把第一个元素当做比较的对象判断当前元素的大小递归调用将所有的结果合并 原理:找到当前数组中的任意一个元素(一般选择第一个元素),作为标准,新建两个空数组left、rignt,遍历整个数组元素,如果遍历到的元素比当前的元素小就放到数组left,比当前的元素大放到rignt,然后再对新...
阅读 2000·2021-11-15 11:38
阅读 2030·2019-08-30 15:55
阅读 2167·2019-08-30 15:52
阅读 3147·2019-08-30 14:01
阅读 2670·2019-08-30 12:47
阅读 1090·2019-08-29 13:17
阅读 1045·2019-08-26 13:55
阅读 2615·2019-08-26 13:46