美文网首页
选择排序(dart实现)

选择排序(dart实现)

作者: 锦鲤跃龙 | 来源:发表于2020-11-04 14:06 被阅读0次

选择排序

[toc]

1.执行流程

  1. 从序列中找出最大的那个元素,然后与组末尾的元素交换位置
    执行完一轮后,最末未的那个元素就是最大的元
  2. 忽略1中曾找到的最大元素,重复执行步骤1

2. dart代码

///
/// Author: liyanjun
/// description: 选择排序
///
List<int> selectSourt(List<int> list) {
  if (list == null || list.length == 0) {
    return [];
  }
  for (var end = list.length - 1; end > 0; end--) {
    int maxIndex = 0;
    for (var begin = 1; begin <= end; begin++) {
      if (list[maxIndex] <= list[begin]) {
        maxIndex = begin;
      }
    }
    int temp = list[maxIndex];
    list[maxIndex] = list[end];
    list[end] = temp;
  }
  return list;
}

运行测试

main(List<String> args) {
  List<int> list = IntergerTools.random(10, 1, 20);//生成随机数
  // List<int> list = IntergerTools.ascOrder(1, 1000);//有序
  //  List<int> list = IntergerTools.tailAscOrder(1, 10000, 2000);//尾部有序
  List<int> list2 = List.from(list);
  List<int> list3 = List.from(list);
  print("排序前:$list");
  // print(list2);
  TimesTools.test('selectSourt', () {
    List result = selectSourt(list);
     print("排序后:$result");
     bool isAs = IntergerTools.isAscOrder(result);//工具类判断是否有序,返回bool值
     print("是否有序:${isAs}");
     Asserts.test(isAs);//利用断言是否有序
  });
}

运行结果

排序前:[2, 7, 19, 13, 9, 4, 12, 19, 16, 10]
【selectSourt】
开始:2020-11-01 10:24:12.729606
排序后:[2, 4, 7, 9, 10, 12, 13, 16, 19, 19]
是否有序:true
结束 2020-11-01 10:24:12.738810
耗时:0.001 秒
-------------------------------------

总结

  • 选择排序的交换次数要远远少于冒泡排序,平均性能由于冒泡排序
    因为冒泡排序每次比较都要进行交换,而选择在比较后只是记录最大值的位置,最后再进行交换一次,所以性能优于冒泡排序
  • 最好、最坏、平均时间复杂度:O(n^2),空间复杂度:O(1),属于不稳定排序
  • 选择最大值的部分,用堆进行优化,可以达到O(nlgn)

相关文章

  • 选择排序(dart实现)

    选择排序 [toc] 1.执行流程 从序列中找出最大的那个元素,然后与组末尾的元素交换位置执行完一轮后,最末未的那...

  • 简单排序

    1、选择排序 实现 2、冒泡排序 实现 3、插入排序 实现

  • 冒泡排序 选择排序

    冒泡排序 java 实现 C 实现 选择排序 java 实现 C 实现

  • 快速排序(dart实现)

    快速排序 [toc] 快速排序1960年由查尔斯安东尼理查德霍尔(Charles Antony Richard H...

  • 堆排序(dart实现)

    堆排序 [toc] 堆排序是选择排序的一种优化 1.执行流程 对序列进行原地建堆 重复执行下面的操作,直到对的元素...

  • 排序算法(dart实现)

    排序算法 [toc] 10大经典排序比较 冒泡、选择、插入、归并、快速、希尔、堆排序,属于比较排序(Compari...

  • 算法-选择排序

    算 法:选择排序算法时间复杂度: 选择排序算法概述 选择排序伪代码 选择排序实现 选择排序算法概述 排序算法有许...

  • 排序算法

    排序 1. 选择排序 代码实现 2. 插入排序 代码实现 3. 冒泡排序 代码实现 4. 快速排序 代码实现

  • 算法设计与分析——5.排序与树结构

    5.1 引言 5.2 递归与排序 5.2.1 选择排序 代码 5.1 选择排序的递归实现 代码 5.2 选择排序...

  • 数据结构之排序

    选择排序1.直接选择排序 原理直接选择排序过程直接选择排序过程 实现: DataWrap.java来模拟待排序的数...

网友评论

      本文标题:选择排序(dart实现)

      本文链接:https://www.haomeiwen.com/subject/btcvvktx.html