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

1. 算法步骤

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

2. 动图演示

动图演示

3. JavaScript 代码实现

1
function selectionSort(arr) {
2
var len = arr.length;
3
var minIndex, temp;
4
for (var i = 0; i < len - 1; i++) {
5
minIndex = i;
6
for (var j = i + 1; j < len; j++) {
7
if (arr[j] < arr[minIndex]) { // 寻找最小的数
8
minIndex = j; // 将最小数的索引保存
9
}
10
}
11
temp = arr[i];
12
arr[i] = arr[minIndex];
13
arr[minIndex] = temp;
14
}
15
return arr;
16
}
Copied!

4. Python 代码实现

1
def selectionSort(arr):
2
for i in range(len(arr) - 1):
3
# 记录最小数的索引
4
minIndex = i
5
for j in range(i + 1, len(arr)):
6
if arr[j] < arr[minIndex]:
7
minIndex = j
8
# i 不是最小数时,将 i 和最小数进行交换
9
if i != minIndex:
10
arr[i], arr[minIndex] = arr[minIndex], arr[i]
11
return arr
Copied!

5. Go 代码实现

1
func selectionSort(arr []int) []int {
2
length := len(arr)
3
for i := 0; i < length-1; i++ {
4
min := i
5
for j := i + 1; j < length; j++ {
6
if arr[min] > arr[j] {
7
min = j
8
}
9
}
10
arr[i], arr[min] = arr[min], arr[i]
11
}
12
return arr
13
}
Copied!

6. Java 代码实现

1
public class SelectionSort implements IArraySort {
2
3
@Override
4
public int[] sort(int[] sourceArray) throws Exception {
5
int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);
6
7
// 总共要经过 N-1 轮比较
8
for (int i = 0; i < arr.length - 1; i++) {
9
int min = i;
10
11
// 每轮需要比较的次数 N-i
12
for (int j = i + 1; j < arr.length; j++) {
13
if (arr[j] < arr[min]) {
14
// 记录目前能找到的最小值元素的下标
15
min = j;
16
}
17
}
18
19
// 将找到的最小值和i位置所在的值进行交换
20
if (i != min) {
21
int tmp = arr[i];
22
arr[i] = arr[min];
23
arr[min] = tmp;
24
}
25
26
}
27
return arr;
28
}
29
}
Copied!

7. PHP 代码实现

1
function selectionSort($arr)
2
{
3
$len = count($arr);
4
for ($i = 0; $i < $len - 1; $i++) {
5
$minIndex = $i;
6
for ($j = $i + 1; $j < $len; $j++) {
7
if ($arr[$j] < $arr[$minIndex]) {
8
$minIndex = $j;
9
}
10
}
11
$temp = $arr[$i];
12
$arr[$i] = $arr[$minIndex];
13
$arr[$minIndex] = $temp;
14
}
15
return $arr;
16
}
Copied!
Last modified 2yr ago