选择排序的算法复杂度与冒泡排序类似,其比较的时间复杂度仍然为O(N),但减少了交换次数,交换的复杂度为O(N),相对冒泡排序提升很多。算法的核心思想是每次选出一个最小的,然后与本轮循环中的第一个进行比较,如果需要则进行交换。

 import 'dart:math' show Random;

 void main() {
final seed = 100, rnd = Random(), length = 100;
var list =
List<int>.generate(length, (i) => rnd.nextInt(seed), growable: false);
print(list);
print('---------------------');
selectSort(list);
print(list);
} void selectSort(List<int> a) {
for (var i = 0; i < a.length - 1; i++) {
var mi = i;
for (var j = i + 1; j < a.length; j++) {
if (a[j] < a[mi]) mi = j;
}
if (i != mi) {
var t = a[i];
a[i] = a[mi];
a[mi] = t;
}
}
}
05-21 16:11