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)

  • 相关阅读:
    LintCode 17.子集
    JS时间操作
    Ajax总结
    Ajax请求文件下载操作失败的原因和解决办法
    遍历Map的几种方式
    java获取文件大小的方法
    Ajax详细介绍
    第31课
    30-React JSX IN DEPTH
    28-React state提升、组件组合或继承
  • 原文地址:https://www.cnblogs.com/canaan233/p/13719074.html
Copyright © 2011-2022 走看看