算法与数据结构系列 ( 三 ) - 选择排序法 - Select Sort
2021-01-29 17:14
标签:一个 iss 对比 img 能耗 整合 为什么 function 了解 有些情况下,我们借用算法的思想去做项目的时候。因为本身达不到 某些特殊情况下,简洁有效 简单的排序算法思想,可以衍生出复杂的排序算法。这也是我写这个系列的原因,可能很多人,做了好几年的业务,也不一定用到算法。但是你的某些行为可能恰恰就是算法思想 | 7 | 2 | 1 | 5 | 4 | 6 | 9 | 3 | 8 | 然后将现在的坐标 经过此次交换后,得到以下数据。并且 | 更多学习内容请访问: 腾讯T3-T4标准精品PHP架构师教程目录大全,只要你看完保证薪资上升一个台阶(持续更新) 算法与数据结构系列 ( 三 ) - 选择排序法 - Select Sort 标签:一个 iss 对比 img 能耗 整合 为什么 function 了解 原文地址:https://www.cnblogs.com/a609251438/p/12831331.html前言
首先我们玩的是比较经典的选择排序
选择排序也是我们本系列的第一个 O(n^2)
算法
很多人认为最优的算法是 O(n log n)
级别的算法这样就衍生出了一个问题
为什么要学习
O(n^2)
级别的算法?基础:
O(n^2)
相对而言比较基础,由简入难。很多时候我们做项目,或者是做其他业务的时候。我们可能找不到最优的解决办法,但是我们肯定会一种最简单的办法。我们先将功能实现,再进行优化。可能相对而言,会有一些性能上面的问题。但是随着我们慢慢优化,我们也会慢慢找到新的,更优秀的方式容易实现:
O(n log n)
级别,那么这个时候,我们可以选择相对简单,和容易实现的级别。如: O(n^2)
简单有效:
由简入难:
废话不多说,直接开始了
插入排序,先简单了解一下思路
首先我们有这么一段数据,我们需要将他们重新整合有序
第一次排序
1
| 7 | 2 | 1
| 5 | 4 | 6 | 9 | 3 | 8 |1
的数值进行一次交换7进行交换位置1
1
也是最终位置1
| 2 | 7
| 5 | 4 | 6 | 9 | 3 | 8 |第二次排序
2
| 1 | 2
| 7 | 5 | 4 | 6 | 9 | 3 | 8 |2
, 就在最终位置。我们可以简单一点,直接不动2
也是最终位置
| 1 | 2
| 7 | 5 | 4 | 6 | 9 | 3 | 8 |第三次排序
3
,当前位置第一是 7
| 1 | 2 | 7
| 5 | 4 | 6 | 9 | 3
| 8 |3
的数值进行一次交换7
进行交换位置
3
| 1 | 2 | 3
| 5 | 4 | 6 | 9 | 7
| 8 |第四次排序
4
,当前位置第一是 5
5
进行交换位置
4
| 1 | 2 | 3 | 4
| 5
| 6 | 9 | 7
| 8 |此后一直以此类推,直至到底
实现一下代码,第一步#
/** 记录开始时间 */
$timeStart = millisecond();
/** 生成一个 100 的随机数组,从 1 开始到 100 */
$sort = generateSort($num,1,$num);
/** 记录结束时间 */
$timeEnd = millisecond();
/** 结束时间 - 开始时间,以后不再申明 */
var_dump(‘生成数组需要时间:‘. ($timeEnd - $timeStart) . " / ms");
第二步
tips: 在 php
当中,while
要比 for
快一丢丢for
,可能是博主不会用 while
吧/**
* 选择排序操作方法 - for
* @param $sort
* @param $n
* @return mixed
*/
function get_select_sort_for($sort,$n){
/** 将数据循环一次 */
for($i = 0;$i $sort[$j]){
/**
* 将最小值和当前的第一个元素进行位置交换
* php 没有位置交换的函数,所以简单一点,先取出,再覆盖
*/
$item = $sort[$i];
$sort[$i] = $sort[$j];
$sort[$j] = $item;
}
}
}
return $sort;
}
while
/**
* 选择排序操作方法 - while
* @param $sort
* @param $n
* @return mixed
*/
function get_select_sort_while($sort,$n){
$i = 0;
while($i $sort[$j]){
$item = $sort[$i];
$sort[$i] = $sort[$j];
$sort[$j] = $item;
}
$j++;
}
$i++;
}
return $sort;
}
第三步
/** 记录排序开始时间 */
$sortStart = millisecond();
/** 调用上面的排序方法 */
$result = get_select_sort_for($sort,$num);
/** 记录排序结束时间 */
$sortEnd = millisecond();
var_dump(‘排序耗时:‘. ($sortEnd - $sortStart) . " / ms");
/** 验证是否有序 */
$msg = isSort($result) ? ‘Yes‘:‘No‘;
var_dump(‘排序是否正确 ? :‘ . $msg);
var_dump(‘本次排序大小:‘. $num);
第四步
文章标题:算法与数据结构系列 ( 三 ) - 选择排序法 - Select Sort
文章链接:http://soscw.com/index.php/essay/48774.html