博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
选择排序
阅读量:5146 次
发布时间:2019-06-13

本文共 736 字,大约阅读时间需要 2 分钟。

  选择排序一般分为简单选择排序堆排序

  简单选择排序

  • 基本思想

      简单选择排序的第i趟是从elem[i]~elem[i-1]中选择第i小的元素,并将此元素放到elem[i]处,也就是说,简单选择排序是从为排序的序列中选择最小的关键字,接着是次小的,以此类推。

  • 复杂度分析

      最外层for循环共循环n次,内层for循环共循环n-i次,可知总比较的次数为n(n+1)/2=O(n2),可知时间复杂度为O(n2)

  • 代码实现
1 def simple_selection_sort(seq):2     # 简单选择排序3     for i in range(0, len(seq)-1):4         min_val = i  # 记录最小值对应的索引5         for j in range(i+1, len(seq)):6             if seq[j] < seq[min_val]:7                 min_val = j  # 将min_val指向剩余序列最小值对应的缩影8         if min_val != i:9             seq[i], seq[min_val] = seq[min_val], seq[i]  # 将剩余序列中最小值和剩余序列中第一个值交换

 

  堆排序

  • 基本思想
  • 复杂度分析

  最坏情况下时间复杂度为O(nlogn),相对快速排序在最坏情况下的时间复杂度为O(n2),这是最大的优势,而且只占用一个用于交换记录的临时存储空间,比快速排序用栈更节约存储空间

 

转载于:https://www.cnblogs.com/pyexile/p/10959221.html

你可能感兴趣的文章
JAVA环境的JAVA_HOME, PATH 和CLASS_PATH设置
查看>>
java tomcat linux 环境变量设置
查看>>
html form action
查看>>
记一次Oracle Clusterware成功安装后的故障处理
查看>>
工作笔记-javascript-网络层封装
查看>>
Laravel Relationship Events
查看>>
求一个有一千个元素的整数数组的最大子数组的和
查看>>
普天C++笔试题
查看>>
Android Studio如何引用外部Library工程
查看>>
HTML5 Canvas 用requestAnimation取代setInterval
查看>>
软件需求模式阅读笔记五
查看>>
《AndroidStudio有用指南》反馈问题和建议
查看>>
WCF探索之旅(三)——IIS公布WCF服务
查看>>
update与upgrade
查看>>
轻量级的绘制图表js库--Morris.js
查看>>
POS tagging的解釋
查看>>
TI(德州仪器) TMS320C674x逆向分析之二
查看>>
WCF学习
查看>>
获取发送请求的ip
查看>>
Activity详解
查看>>