1.2 选择排序
分类 算法
选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。
1. 算法步骤
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
重复第二步,直到所有元素均排序完毕。
2. 动图演示
代码实现
JavaScript 代码实现
实例
function(){
var=length;
var,;
for(var=0;<-1;++){
=;
for(var=+1;<;++){
if([]<[]){// 寻找最小的数
=;// 将最小数的索引保存
}
}
=[];
[]=[];
[]=;
}
return;
}
### Python 代码实现
实例
def()
forinrange(len()1)
# 记录最小数的索引
=
forinrange(1,len())
if[]<[]
=
# i 不是最小数时,将 i 和最小数进行交换
if!=
[],[]=[],[]
return
### Go 代码实现
实例
func([]int)[]int{
:=len()
fori:=0;i-1;i++{
:=i
for:=i+1;;++{
if[][]{
=
}
}
[i],[]=[],[i]
}
return
}
### Java 代码实现
实例
publicclassimplements{
publicintthrowsException{
int[]=ArrayscopyOf(length);
// 总共要经过 N-1 轮比较
for(int=0;
// 每轮需要比较的次数 N-i
for(int=+1;
// 记录目前能找到的最小值元素的下标
=;
}
}
// 将找到的最小值和i位置所在的值进行交换
if(!=){
int=[];
[]=[];
[]=;
}
}
return;
}
}
### PHP 代码实现
实例
function($arr)
{
$len=count($arr);
for($i=0;$i<$len-1;$i++){
$minIndex=$i;
for($j=$i+1;$j<$len;$j++){
if($arr[$j]<$arr[$minIndex]){
$minIndex=$j;
}
}
$temp=$arr[$i];
$arr[$i]=$arr[$minIndex];
$arr[$minIndex]=$temp;
}
return$arr;
}
### C 语言
实例
void(int,int)//交換兩個變數
{
int=;
=;
=;
}
void(int[],int)
{
int,;
for(=0;<-1;++)
{
int=;
for(=+1;<;++)//走訪未排序的元素
if([]<[])//找到目前最小值
=;//紀錄最小值
(&[],&[]);//做交換
}
}
### C++
实例
template
void(::vector<>&){
for(int=0;
for(int=+1;
=;
::swap([][]);
}
}
### C#
实例
staticvoid<>([])where:System.IComparable<>{//整數或浮點數皆可使用
int=.Length;
;
for(=0;<-1;++){
=;
for(=+1;<;++)
if([].CompareTo([])>0)
=;
=[];
[]=[];
[]=;
}
}
### Swift
实例
/// 选择排序
///
/// - Parameter list: 需要排序的数组
(:[])-{
forin0-1{
=
forin{
if[][]{
=
}
}
()
}
}
> 原文地址:https://github.com/hustcc/JS-Sorting-Algorithm/blob/master/2.selectionSort.md
参考地址:https://zh.wikipedia.org/wiki/%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F