冒泡排序,快速排序,選擇排序,二分查找

'''
冒泡排序原理: 每一趟只能將一個數歸位, 如果有n個數進行排序,只需將n-1個數歸位, 也就是說要進行n-1趟操作(已經歸位的數不用再比較),每一次都是得到比較列表中最大的數。
排列順序:從大到小,從右向左排,右邊的數最大,
'''

def bubble_sort(seq): 
    for i in range(len(seq)-1): #每一趟只能將一個數據歸位,所以需要有 len(seq)-1 次循環比較。每一次歸位的數爲列表中最大的數。
        for j in range(len(seq)-i-1): #每一次循環有 len(seq)-i-1  次比較。  
            if seq[j] > seq[j+1]:  #將相鄰的兩個數進行比較  
                seq[j], seq[j+1] = seq[j+1], seq[j]  #把數值小的放前面,數值大的放後面.
    return seq
'''
選擇排序:(每次得到最小值)
選擇排序比較好理解,好像是在一堆大小不一的球中進行選擇(以從小到大,先選最小球爲例):

  1. 選擇一個基準球

  2. 將基準球和餘下的球進行一一比較,如果比基準球小,則進行交換

  3. 第一輪過後獲得最小的球

  4. 在挑一個基準球,執行相同的動作得到次小的球

  5. 繼續執行4,直到排序好

'''

def selected_sort(seq):
    '''
    index: 下標,用於記錄列表中最小值的一個索引值
    i: 下標,用於記錄列表中位於第一個數的下標
    '''
    for i in range(len(seq)-1):
        index = i
        for j in range(i+1,len(seq)):
            if seq[index] > seq[j]:
                index = j
                seq[i], seq[index] = seq[index], seq[i]
    return seq
'''
快速排序
'''

# 使用遞歸
def quick_sort(seq):
    if seq == []:
        return []
    else:
        pivot = seq[0]
        lesser = quick_sort([x for x in seq[1:] if x < pivot])
        greater = quick_sort([x for x in seq[1:] if x >= pivot])
        return lesser + [pivot] + greater
'''
二分查找法:遞歸方法
'''

def binary_chop(alist, data):
    n = len(alist)
    if n < 1:
        return False

    mid = n // 2
    if alist[mid] > data:
        # Python 中的切片 alist[0:mid] 從0開始,到mid,但是不包括mid
        return binary_chop(alist[0:mid], data)
    elif alist[mid] < data:
        return binary_chop(alist[mid+1:], data)
    else:
        return True

 

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