选择排序

1. 什么是选择排序?

选择排序(Selection sort)的基本原理是:从列表中选出最大(小)的元素,放到列表的起始位置,然后从剩余的元素中选出最大(小)的元素放到已排好序的列表的后面,直到所有元素都排好。

2. 图解选择排序

图解选择排序

3.代码实现

· 两个列表实现选择排序

def findlargest(arr):
    largest = arr[0]
    largest_index = 0

    for i in range(1, len(arr)):
        if arr[i] > largest:
            largest_index = i
            largest = arr[i]

    return largest_index

def selectionsort(arr):
    newArr = []

    for i in range(len(arr)):
        smallest = findlargest(arr)
        newArr.append(arr.pop(smallest))

    return newArr

· 一个列表实现选择排序

def selectionsort(arr):
    for i in range(0, len(arr)):
        for j in range(i+1, len(arr)):
            if arr[j] > arr[i]:
                arr[i], arr[j] = arr[j], arr[i]

    return arr

4. 时间复杂度

选择排序的时间复杂度是O(n^2)。
第一次需要检查n个元素,但随后检查的元素数依次为n-1, n-2, …, 2和1。平均每次检查的元素数为1/2 × n,因此运行时间为O(n × 1/2 × n)。但大O表示法省略诸如1/2这样的常数,因此简单地写作O(n × n)或O(n^2)。

5. 进一步思考选择排序

选择排序比较耗费时间的地方就在于每次循环只选出一个符合条件的元素,我们可以进一步思考,如果每次循环能选出两个元素放到指定位置,效率会不会提升呢?
以下代码一次选出两个元素,最大和最小的元素:

def selectionsort3(arr):
    n = len(arr)

    for i in range(0, n//2):
        largest = arr[i]
        largest_index = i
        smallest = arr[n-i-1]
        smallest_index = n-i-1
        for j in range(i+1, n-i):
            if arr[j] > largest:
                largest = arr[j]
                largest_index = j
            if arr[j] < smallest:
                smallest = arr[j]
                smallest_index = j
        arr[i], arr[largest_index] = arr[largest_index], arr[i]
        arr[n-i-1], arr[smallest_index] = arr[smallest_index], arr[n-i-1]

    return arr

使用了10000的随机数,进行了简单比较:
一个列表实现选择排序 6s
选择两个元素的方法 2s

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

推荐阅读更多精彩内容

  • 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小...
    阿凡提说AI阅读 1,684评论 0 0
  • 1、基本思想 每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕。也就是:每一...
    Sopphire阅读 5,130评论 0 0
  • 一个男孩和一头熊成了朋友,他们彼此喜欢,互相依恋。遗憾的是,这头熊有个缺点-口臭。但由于男孩非常喜欢它,他从...
    大玲儿阅读 1,886评论 0 0
  • 大数据技术渗透到各行各业,每个公司都需要大数据人才! 大数据需求旺盛与人才短缺并存 全球领先的咨询公司麦肯锡发布的...
    4a513defc375阅读 3,671评论 0 2
  • 文/小燕子 01 雨下的一直不停,滴滴答答的。自晴来到杭州以后,就没见过几天好天气。晴实在在酒店待不住了,就一个人...
    云懿阅读 4,624评论 4 18

友情链接更多精彩内容