算法二---排序(1)

題目

Question1 2017年11月20日
Description:
給一組整數,按照升序排序,使用選擇排序,冒泡排序,插入排序或者任何 O(N2 ) 的排序算法。
樣例:
對於數組 [3, 2, 1, 4, 5], 排序後爲:[1, 2, 3, 4, 5]。

分析

1.冒泡排序

通俗地說,數組的每個元素都是個泡泡,數字越,就越輕,所以3就會一層一層的往右邊浮動,先和2比,輕一些,把2擠下去,再和1比,輕一些,浮上去,和4比,ok,停住,同時把使命交給4,4繼續上浮,以完成一整個循環。下一次就從第二個位置開始。
這裏寫圖片描述

這裏寫圖片描述

def sortIntegers(self, A):
    for i in range(len(A)):
        j = i
        for j in range(j+1,len(A)):
            if A [i] > A [j]:
                k = A[i]
                A[i] = A[j]
                A[j] = k
            else:
                pass
    print(A)

兩層循環,時間複雜度N2

時間複雜度:O(N2 )

2.選擇排序

這裏同樣是兩層循環,每層循環選出一個剩下的元素中最小的放在數組的前面,第一次選出1,放在對首,下一循環就從隊首後開始,選出2,放在隊首後面,以此類推,關鍵就是每次循環要保存一個最小值。

這裏寫圖片描述

這裏寫圖片描述

def sortIntegers2(self, A):
    for i in range(len(A)):
        j = i
        minNum = A[i]
        for j in range(j+1,len(A)):
            if A [j] < minNum:
                k = minNum
                minNum = A[j]
                A[j] = k
            else:
                pass
            A[i] = minNum
    print(A)

時間複雜度:O(N2 )

3.插入排序

插入排序的理解,需要兩個數組,初始數組是被排序數組和空數組,把被排序數組中的元素一個個插入空數組中,插好即排好。每次插入時只要從頭遍歷排好的數組找到左邊小右邊大的位置插進去就行了。

這裏寫圖片描述

這裏寫圖片描述

def sortIntegers3(self, A):
    B = [A[0]]
    for i in range(1,len(A)):
        j = 0
        for j in range(j,len(B)):
            if A[i] < B[j] :
                B.insert(j,A [i])
                print(A[i])
                break
            else:
                pass
        B.append(A[i])
    A = B
    print(A)

時間複雜度:O(N2 )

總結:
這幾種排序是最好寫的,同時複雜度也是最高的,感覺起一個引導的效果吧,主要還是後面的複雜度更低的排序算法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章