选择排序的算法复杂度与冒泡排序类似,其比较的时间复杂度仍然为O(N2),但减少了交换次数,交换的复杂度为O(N),相对冒泡排序提升很多。算法的核心思想是每次选出一个最小的,然后与本轮循环中的第一个进行比较,如果需要则进行交换。
1 import ‘dart:math‘ show Random; 2 3 void main() { 4 final seed = 100, rnd = Random(), length = 100; 5 var list = 6 List<int>.generate(length, (i) => rnd.nextInt(seed), growable: false); 7 print(list); 8 print(‘---------------------‘); 9 selectSort(list); 10 print(list); 11 } 12 13 void selectSort(List<int> a) { 14 for (var i = 0; i < a.length - 1; i++) { 15 var mi = i; 16 for (var j = i + 1; j < a.length; j++) { 17 if (a[j] < a[mi]) mi = j; 18 } 19 if (i != mi) { 20 var t = a[i]; 21 a[i] = a[mi]; 22 a[mi] = t; 23 } 24 } 25 }
原文地址:https://www.cnblogs.com/outerspace/p/10250911.html
时间: 2024-10-28 20:36:58