zoukankan      html  css  js  c++  java
  • [排序N大件之]选择排序

    选择排序:

    选择排序有序排列部分是维持在列表的前段的,这一点很重要,因为这决定了我们从哪个元素开始假设这一趟比较交换的最小值。

    选择排序的思想:

    总是假设未排序部分的第一个元素为最小值,然后遍历这个元素之后的剩下的元素,不断更新未排序部分最小值存在的位置,这趟比较结束了,就把找到的最小值和第一个元素交换

    所以外层循环我们开始假设最小值的位置:

    是从第[0]个元素开始假设最小值在的位置:for i in range(n)

    内层循环我们依次进行比较,记录最小值的位置

    从第[i+1]个元素开始找真正的最小值:for j in range(i + 1)

    找到最小值之后,就和第一个元素做交换

    def selectionSort(nums):
        n = len(nums)
        # 这里有个小细节,最后一次假设的最小元素的位置只要是n-2就可以了,因为是从i+1开始找真正的最小值
        for i in range(n - 1):
            min_index = i
            for j in range(i + 1, n):
                if nums[j] < nums[min_index]:
                    min_index = j
    
            nums[i], nums[min_index] = nums[min_index], nums[i]
    
        return nums
    
    if __name__ == "__main__":
        numbers = [3, 6, 2, 1, 8, 7, 9, 5]
        print(selectionSort(numbers))

    时间复杂度:O(n2)

    空间复杂度:O(1)

  • 相关阅读:
    Java IO包装流如何关闭?
    Validator关于js,jq赋值不触发验证解决办法
    4 统计量&抽样分布
    3 概率的基本概念&离散型随机变量
    2 数据的概括性度量
    1 数据 & 图表
    Python 闭包
    一个自动修正数据时间和补全缺失数据的MapReduce程序
    MapReduce原理
    Hadoop MapReduce常用输入输出格式
  • 原文地址:https://www.cnblogs.com/canaan233/p/13719074.html
Copyright © 2011-2022 走看看