1. 程式人生 > >Python實現 《演算法導論 第三版》中的演算法 第2章 演算法基礎

Python實現 《演算法導論 第三版》中的演算法 第2章 演算法基礎

第2章 演算法基礎

1. 插入排序

P17。插入排序比較簡單。

class InsertionSort:
    def sort(self, A):
        for i in range(1, len(A)):
            temp = A[i]
            j = i - 1
            while j >= 0 and A[j] > temp:
                A[j + 1] = A[j]
                j -= 1
            A[j + 1] = temp # 不滿條件的下一個位置
return A def main(): isort= InsertionSort() A = [9, 8, 7, 6, 5, 4, 10, 12] print(isort.sort(A)) if __name__ == '__main__': main()

2. 歸併排序

P17。歸併排序利用了分治法,Python實現與書中的虛擬碼不一樣,這是由於Python的語言特點所導致的。

class MergeSort:
    def sort(self, arr):
        if len(arr) <= 1:
            return
arr mid = len(arr) // 2 left_arr = self.sort(arr[:mid]) right_arr = self.sort(arr[mid:]) return self.merge(left_arr, right_arr) def merge(self, arr1, arr2): res = [] i1 = i2 = 0 while i1 < len(arr1) and i2 < len(arr2): if
arr1[i1] < arr2[i2]: res.append(arr1[i1]) i1 += 1 else: res.append(arr2[i2]) i2 += 1 if i1 == len(arr1): res.extend(arr2[i2:]) else: res.extend(arr1[i1:]) return res def main(): ms = MergeSort() A = [9, 8, 7, 6, 5, 4, 10, 12, 1] print(ms.sort(A)) if __name__ == '__main__': main()

3. 選擇排序

P16練習2.2-2。

class SelectionSort:
    def sort(self, A):
        for i in range(0, len(A)):
            k = i
            # Find the smallest num and record its index
            for j in range(k, len(A)):
                if A[j] < A[k]:
                    k = j
            if k != i:
                A[i], A[k] = A[k], A[i]
        return A
    
    
def main():
    ss= SelectionSort()
    A = [9, 8, 7, 6, 5, 4, 10, 12]
    print(ss.sort(A))
    
    
if __name__ == '__main__':
    main()

4. 氣泡排序

P23思考題2-2。

class BubbleSort:
    def sort(self, A):
        for i in range(len(A)):
            for j in range(0, len(A)-i-1):
                if A[j] > A[j+1]:
                    A[j], A[j+1] = A[j+1], A[j]
                    
        return A
    
def main():
    bs = BubbleSort()
    A = [9, 8, 7, 6, 5, 4, 10, 12]
    print(bs.sort(A))

  
if __name__ == '__main__':
    main()