选择排序

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

需要检查的元素数越来越少
随着排序的进行,每次需要检查的元素数在逐渐减少,最后一次需要检查的元素都只有一
个。既然如此,运行时间怎么还是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)

 

posted @ 2019-05-30 13:50  Chris,Cai  阅读(200)  评论(0编辑  收藏  举报