zoukankan      html  css  js  c++  java
  • 查找和排序-4.选择排序

    用之前学过的Python自带方法排序

    def select_sort_simple(li):
    li_new = []
    for i in range(len(li)):
    min_val = min(li)
    li_new.append(min_val)
    li.remove(min_val)
    return li_new

    这个方法结果是没有问题的,但是不建议使用 :
      1.空间上使用两个列表 会多一倍内存消耗
      2.remove 会找到列表在删掉再往前补 所以时间复杂度是O(n*n)

    所以时间和空间复杂度来说都不是很好的实现方式


    选择排序
    def select_sort(li):
    for i in range(len(li)):
    min_loc = i
    for j in range(i+1,len(li)):
    if li[j] < li[min_loc] : #成立保证每一次交换的都是最小值
    min_loc = j #记录当前最小数值的索引
    print('min_loc',min_loc)
    li[i], li[min_loc] =li[min_loc],li[i] #min_loc = i 所以有交换但是数值没有变,所以不稳定
    print(li)

    li = [3,1,5,4,8]
    select_sort(li)

    选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,
    存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。
    选择排序是不稳定的排序方法。

    时间复杂度

      杂度为 
    可以看出这个实现方法与冒泡排序很相似的,但是细看还是有区别的
      -冒泡排序每一次排序都是会交换 ,选择排序就只有冒泡的一半交换次数
      -冒泡排序是稳定的方法,选择排序不是稳定方法
     


  • 相关阅读:
    Zero-shot Relation Classification as Textual Entailment (Abiola Obamuyide, Andreas Vlachos, 2018)阅读笔记:Model
    高阶Erlang:超大只的问答房间
    高阶的Parser:可变运算优先级
    Erlang练习2:火烈鸟
    Erlang实现的模拟kaboose(山寨kahoot)
    Prolog模拟社交圈
    08-bootcss
    07-jQuery
    06-字符串、表单form、input标签
    05-有名/无名函数
  • 原文地址:https://www.cnblogs.com/sunny666/p/10761712.html
Copyright © 2011-2022 走看看