1.2 选择排序

分类 算法

选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。
哔哩哔哩动画

1. 算法步骤

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
重复第二步,直到所有元素均排序完毕。

2. 动图演示

058_排序_选择排序算法总结 - 图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;int=;

// 每轮需要比较的次数 N-i
for(int=+1;if([]<[]){
// 记录目前能找到的最小值元素的下标
=;
}
}

// 将找到的最小值和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//整數或浮點數皆可使用,若要使用物件(class)時必須設定大於(>)的運算子功能
void(::vector<>&){
for(int=0;int=;
for(int=+1;if([]<[])
=;
::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