日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

python數(shù)據(jù)結構與算法之排序

 印度阿三17 2019-03-13

排序算法的穩(wěn)定性:

假設有一串數(shù)據(jù):(4,1)(3,1)(3,7)(5,6);要求按照第一個數(shù)排序,結果如下:

第一種:(3,1)(3,7)(4,1)(5,6)(3相同,維持原來的次序)

第二種:(3,7)(3,1)(4,1)(5,6)(3相同,次序被改變)

第一種是穩(wěn)定的。

冒泡排序(以從小到大排為例):

每次走一遍把最大的元素冒泡,排到最后。

'''
冒泡排序:它也可以用于之前講的鏈表什么的,只是交換部分稍微煩一點,思想一樣。這里簡單一點 ,以數(shù)字為例
'''
def bubble_sort(alist):
    '''冒泡排序,參數(shù)為列表'''
    n = len(alist)-1
    for j in range(n):
        for i in range(n-j):
            if alist[i]>alist[i 1]:
                # 前一個大于后一個,交換
                alist[i], alist[i 1] = alist[i 1], alist[i]    # 這樣寫在python這種動態(tài)語言中可以

if __name__ == '__main__':
    a = [2,0,5,1,10]
    bubble_sort(a)
    print(a)

冒泡排序的時間復雜度為:最壞可以認為是O(n^2),穩(wěn)定的

改進:假如傳入的序列就是有序的,比如[1,2,3,4,5,6]。此時按照上面代碼還是要一步步比較,復雜度是一樣的。改進之后,最優(yōu)時間復雜度為O(n),最壞時間復雜度不變。

def bubble_sort(alist):
    '''冒泡排序,參數(shù)為列表'''
    n = len(alist)-1
    for j in range(n):
        count = 0
        for i in range(n-j):
            if alist[i]>alist[i 1]:
                # 前一個大于后一個,交換
                alist[i], alist[i 1] = alist[i 1], alist[i]    # 這樣寫在python這種動態(tài)語言中可以
                count  = 1
        if count == 0:
            return 

選擇排序:

思想解釋:每次找到最小的值,與無序數(shù)中的一個數(shù)交換,比如:

a = [52,100,23,43,55,20,17,108]

找到最小值是17,將17與52交換,得:

a = [17,100,23,43,55,20,52,108]

看除了第一個數(shù)17外,其他最小的為20,與“第一個數(shù)”100交換:

a = [17,20,23,43,55,100,52,108]

此時,前面兩個數(shù)已經(jīng)有序,以此往下。

def select_sort(alist):
    """選擇排序,既然是研究數(shù)據(jù)結構與算法,這里不用min()函數(shù)"""
    n = len(alist)
    for j in range(n-1):
        # 記錄最小值的位置,這里首次默認是無序中的第一個
        min_index = j
        for i in range(j 1,n):
            if alist[i]<alist[min_index]:
                min_index = i
        alist[j], alist[min_index] = alist[min_index], alist[j]

選擇排序的時間復雜度:O(n^2),不穩(wěn)定

插入算法:

思想理解,與上面選擇排序有點雷士,其實還是將序列無形的分為兩部分。比如序列[52,100,23,43,55,20,17,108]。

將序列分為[52,                      100,23,43,55,20,17,108],第一部分是有序的。

然后將無序中的第一個100與有序中52比較,放在正確的位置[52,100,                      23,43,55,20,17,108],

同理接著比較23與[52,100],將其插入正確的位置[23,52,100,                            43,55,20,17,108]

來源:http://www./content-1-138451.html

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多