Python实现选择排序

选择排序

选择排序和插入排序类似,也是将数组分成了未排序部分已排序部分,每一次循环的都在未排序的区间里面找到最小或者最大的值,然后将其放在左边已排序区间。

代码实现

"""
    选择排序
    Author: xingrui
"""


# 选择排序 - 正序
def selectSortWithAsc(nums: list) -> list:
    length = len(nums)

    for i in range(0, length - 1):
        minIndex = i

        for j in range(i + 1, length):
            if nums[minIndex] > nums[j]:
                minIndex = j

        if minIndex != i:
            temp = nums[i]
            nums[i] = nums[minIndex]
            nums[minIndex] = temp

    return nums


# 选择排序 - 逆序
def selectSortWithDesc(nums: list) -> list:
    length = len(nums)

    for i in range(0, length - 1):
        maxIndex = i

        for j in range(i + 1, length):
            if nums[maxIndex] < nums[j]:
                maxIndex = j

        if maxIndex != i:
            temp = nums[i]
            nums[i] = nums[maxIndex]
            nums[maxIndex] = temp

    return nums


if __name__ == "__main__":
    nums = [4, 5, 2, 6, 2, 3, 9, 3]

    selectSortWithAsc(nums)
    print('插入排序,正序排列', nums)

    selectSortWithDesc(nums)
    print('插入排序,逆序排列', nums)

分析

选择排序的最好最坏时间复杂度都是O(n^2),空间复杂度为O(1)。值得注意的是,冒泡排序和插入排序都是稳定的排序算法(即数组当中相同的元素在排序之后,前后顺序保持不变),而选择排序不是稳定的排序算法,举个例子,有如下数组5, 2, 3, 6, 5, 1

按照选择排序的原理,会找到未排序区间里最小的元素,1。然后将1放到最左边,所以要将原本在最左边的元素5与1进行交换,这样一来,原本在最前面的5跑到了最后,数组当中两个5的相对关系发生了变化,所以选择排序不是稳定的排序算法

参考

https://www.jianshu.com/writer#/notebooks/44679128/notes/66785923/preview
https://time.geekbang.org/column/article/41802
https://www.jianshu.com/p/135261a2f8d1
https://www.jianshu.com/p/05cdb2735d3b

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 选择排序算法步骤: 找到数组中最小的那个元素中, 将它和数组的第一个元素交换位置, 在剩下的元素中找到最小的元素,...
    融合xx阅读 1,198评论 0 1
  • 选择排序,简单而直观,其原理是把序列中的最小值或者最大值找出来放在起始位置,然后再从剩下的序列中找出极值放到起始位...
    Python之战阅读 3,229评论 0 4
  • 排序的基本概念 在计算机程序开发过程中,经常需要一组数据元素(或记录)按某个关键字进行排序,排序完成的序列可用于快...
    Jack921阅读 5,385评论 1 4
  • 本文对一些排序算法进行了简单分析,并给出了 javascript 的代码实现。因为本文包含了大量的排序算法,所以分...
    前端西瓜哥阅读 2,688评论 0 0
  • python实现选择排序​ ​ 假设你有一个因为列表,上面记录你歌曲的播放数量,现在需要对音乐列表进行排序,按...
    仲冬初七阅读 1,850评论 0 0

友情链接更多精彩内容