排序算法学习之路——选择排序
选择排序是一种简单直观的排序算法。其基本思想是在未排序的序列中选择一个最大(或最小)元素放到末尾(注意:这里是未排序序列的末尾,可以认为是有序序列的起始位置)。
下面通过一个简单的图例来了解一下这个选择的过程
首先记录选择第一个元素作为默认最大值,v存放值,p存放位置。
v = 10 ,p = 0
然后从第一个位置开始向后查找比10大的元素,找到以后替换v和p的值。
v = 12 ,p = 2
v = 30 ,p = 3
直到最后一个元素为止,30为该未排序序列中最大的元素。
然后交换30和最后一个元素,并且在下次选择中30不再参与比较。
第二次选择,v和p的初始值为0和10
v = 10 , p = 0
经过查找,最后确定 v = 15 , p = 3
然后交换15和5(因为30已不再参与排序)
15和30一样也不再参与排序。
然后依次按照上述过程进行选择交换,直到所有元素都有序为止
上面就是选择排序的整个过程。用文字表示其排序的步骤就是
1)首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置
2)再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
3)重复第二步,直到所有元素均排序完毕。
下面我们看选择排序的代码实现
/**
* 交换函数
*/
function swap(&$arr,$a,$b){
$t = $arr[$a];
$arr[$a] = $arr[$b];
$arr[$b] = $t;
}
function SelectSort(&$arr){
$end = count($arr)-1;
do{
$p = 0;
for($i=0;$i<=$end;$i++){
if($arr[$i]>$arr[$p]){
$p = $i;
}
}
swap($arr,$p,$end);
}while(--$end>0);
}
$arr = array(10,6,8,23,4,1,17,56,32,50,11,9);
SelectSort($arr);
print_r($arr);
我们看上面的代码可以知道,选择排序很直观。其实现思路很简单,并不复杂。
但是有一点需要注意的是。虽然选择排序很简单,但是选择排序的效率较其他的排序算法低。其时间复杂度为O(n²)。所以说在应用中我们要根据实际情况去选择我们的排序算法。
希望本文对大家有所帮助。
相关文章
使用 phpMyAdmin 删除 MySQL 数据库中的所有行
发布时间:2024/03/25 浏览次数:70 分类:MySQL
-
在本指南中,我们将了解使用 phpMyAdmin 从 MySQL 数据库中删除所有行的最佳方法。
循环 PHP MySQLi 获取数组函数
发布时间:2024/03/25 浏览次数:125 分类:MySQL
-
本教程将指导你了解 php mysqli_fetch_array() 函数,并介绍如何迭代 mysqli 查询。
Java 中的选择排序算法
发布时间:2023/10/17 浏览次数:153 分类:Java
-
本教程演示了 Java 中的选择排序算法。选择排序是首先选择列表或数组中最小的元素并与第一个元素或数组交换的方法;然后,第二个缩小的元素与第二个元素交换。
Java 基数排序算法
发布时间:2023/10/17 浏览次数:206 分类:Java
-
本教程详细解释了基数排序算法并演示了 Java 中的实现。在基数排序算法中,元素的排序首先将具有相同位值的单个数字分组,然后按照升序或降序排序。本教程详细解释了基数排序算法,并演
在 Java 中的冒泡排序算法对手动链表进行排序
发布时间:2023/10/11 浏览次数:110 分类:Java
-
首先,我们将通过节点示例讨论 Java 中的冒泡排序算法。然后,我们将执行两种方法来演示如何使用手动冒泡排序算法对链表进行排序。
C++ 中最快的排序算法
发布时间:2023/08/31 浏览次数:164 分类:C++
-
本文将解释哪种排序算法在什么条件下表现最好。 条件包括数据结构的类型、排序数据的大小、数据排列和数据元素的范围。
Java最快的排序算法
发布时间:2023/07/16 浏览次数:164 分类:Java
-
本文将介绍两种最快的排序算法并用 Java 编写它们的代码。第一种技术是计数排序,它有一些局限性。 因此,我们还将介绍合并排序算法。 Java中的计数排序算法 Java中的归并排序算法
使用 PHP MySQLi 函数获取最后插入的 ID
发布时间:2023/05/09 浏览次数:102 分类:MySQL
-
本篇文章简要介绍了 PHP mysqli() 函数并演示了如何使用它从 MySQL 数据库中获取最后插入的 ID。它是一个名为 mysqli 的 MySQL 驱动程序扩展版本,
在 PHP 中使用 MongoDB 作为文件存储
发布时间:2023/04/20 浏览次数:143 分类:MongoDB
-
在为大文件创建可扩展存储方面,MongoDB 及其 GridFS(使用 MongoDB 查询语言 - MQL 编写)是市场上最好的文件存储解决方案之一。 在本教程中,您将学习如何在 PHP 中使用 MongoDB 作为文件存储。