Python实现 《算法导论 第三版》中的算法 第2章 算法基础

版权声明:本文为博主原创文章,如有转载请标注来源。 https://blog.csdn.net/shengchaohua163/article/details/82810017

第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()       

猜你喜欢

转载自blog.csdn.net/shengchaohua163/article/details/82810017