1. 程式人生 > >20190125-找到列表第二大的數以及自己寫一個冒泡排序

20190125-找到列表第二大的數以及自己寫一個冒泡排序

lan 並且 整體 lang 需要 負責 給定 一位 應該

1. 給定一個列表,找出列表第二大的值

思路:考慮列表是可能是亂序列表,並且可能存在兩個相等的最大值的情況。

s1 = [34,33,2,1,6,7,7,44,3,23,23]

解法1:去重(解決可能存在兩個相等的最大值),然後使用sort排序,然後然後通過切片取到第二大的值。tip,一定要先去重再排序,如果先排序再去重可能會打亂序列

s1 = [34,33,2,1,6,7,7,44,3,23,23]
s2 = list(set(s1))
s2.sort()
print(s2[-2])
#s2[-2]即為列表第二大的值

解法2:自己定義2個變量,與列表中的值一一對比,考慮對比的i的值大於最大值,以及處於最大值與第二大值之間的情況

def find_the_second_max_value(s):
    if isinstance(s,list):
        first_max_value=s[0]
        second_max_value=s[0]
        for i in range(len(s)):
            if s[i]>=first_max_value:
                second_max_value=first_max_value
                first_max_value=s[i]
            elif s[i]<first_max_value and
s[i]>=second_max_value: second_max_vaule=s[i] return second_max_value else: return False print(find_the_second_max_value(s1))

發散思考:自己寫一個冒泡排序

冒泡排序思路

第一輪

s1 = [34,33,2,1,6,7,7,44,3,23,23]

第一步:34>33====》s1=[33,34,2,1,6,7,7,44,3,23,23]

第二步:34》2====》s1=[33,2,34,1,6,7,7,44,3,23,23]

第三步:34》1====》s1=[33,2,1,34,6,7,7,44,3,23,23]

一直比較到最後一位數,那麽s1[0]和所有的數都比較了,第一輪比較結果為s1 = [33,2,1,6,7,7,44,3,23,23,34]

第二輪

s1 = [33,2,1,6,7,7,44,3,23,23,34]

第一步:33>2====》s1=[2,33,1,6,7,7,44,3,23,23,34]

第二步:33>1====》s1=[2,1,33,6,7,7,44,3,23,23,34]

第三步:33>6====》s1=2,1,6,33,7,7,44,3,23,23,34]

一直比較到最後一位數,那麽s1[0]和所有的數都比較了,第二輪比較結果為s1 = [2,1,6,7,7,44,3,23,23,33,34],需要註意的一點是第二輪比較的步數應該比第一輪比較的步數少1,即33比較到最後一個23即可,因為33和34在第一輪已經比較過了

因此整體考慮使用兩層循環來思想,第一層循環負責比較的輪數len(s)次,第二層循環負責每輪比較的步數len(s)-1-j次

def bubble_order(s,reverse=None):
    if reverse==None or reverse==False:
        for j in range(len(s)):
            for i in range(len(s)-1-j):
                if s[i]>s[i+1]:
                    temp = s[i+1]
                    s[i+1]=s[i]
                    s[i]=temp
    elif reverse ==True:
        for k in range(len(s)):
            for l in range(len(s)-1-k):
                if s[l]<s[l+1]:
                    temp = s[l+1]
                    s[l+1]=s[l]
                    s[l]=temp
    return s

tips:決定每層循環的次數很重要,需要仔細思考

20190125-找到列表第二大的數以及自己寫一個冒泡排序