zoukankan      html  css  js  c++  java
  • 选择排序

    选择排序:每次选择一个最小的放入到一个新的数组或者列表中,以此来排序,放入到新数组的元素在原来的数组中要删除。

    需要检查的元素数越来越少
    随着排序的进行,每次需要检查的元素数在逐渐减少,最后一次需要检查的元素都只有一
    个。既然如此,运行时间怎么还是O(n2)呢?这个问题问得好,这与大O表示法中的常数相关。
    第4章将详细解释,这里只简单地说一说。
    你说得没错,并非每次都需要检查n个元素。第一次需要检查n个元素,但随后检查的元素
    数依次为n  1, n – 2, …, 2和1。平均每次检查的元素数为1/2 × n,因此运行时间为O(n × 1/2 × n)。
    但大O表示法省略诸如1/2这样的常数(有关这方面的完整讨论,请参阅第4章),因此简单地写作O(n × n)或O(n2)。

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    '选择排序 '
    __author__ = 'chris'
    
    ''' 对下列歌手的听歌次数进去排序,使用选择排序
        O(n*n) 
    '''
    # RADIOHEAD 156
    # KISHORE KUMAR 141
    # THE BLACK KEYS 35
    # NEUTRAL MILK HOTEL 94
    # BECK 88
    # THE STROKES 61
    # WILCO 111
    
    def section_sort(list):
        newArr = []
        for i in range(len(arr)):
            index = findSmallest(list);# 找到最小元素的下标
            newArr.append(arr.pop(index)) # 在新列表中添加最小的元素,并且原列表中删除,pop() 删除元素,并且返回
        return newArr
    
    def findSmallest(list):
        for smallValue_ele in list[0].values():
            pass
        smallest_index = 0
        for i in range(1,len(list)):
            for key,value in list[i].items():
                if value < smallValue_ele:
                    smallValue_ele = value
                    smallest_index = i;
        return smallest_index
    
    arr = [{'RADIOHEAD':156},{'KISHORE KUMAR':141},{'THE BLACK KEYS' : 35},{'NEUTRAL MILK HOTEL':94},{'BECK':88},
            {'THE STROKES':61},{'WILCO':111}]
    
    
    res = section_sort(arr)
    print(res)
  • 相关阅读:
    表单重复提交问题
    Win8.1卸载64位Oracle Database 11g的详细图文步骤记录
    A1084. Broken Keyboard (20)
    A1088. Rational Arithmetic (20)
    A1089. Insert or Merge (25)
    A1034. Head of a Gang (30)
    A1013. Battle Over Cities (25)
    A1030. Travel Plan (30)
    A1003. Emergency (25)
    A1076. Forwards on Weibo (30)
  • 原文地址:https://www.cnblogs.com/pickKnow/p/10949148.html
Copyright © 2011-2022 走看看