Python基本常用演算法

來源:互聯網
上載者:User

標籤:bre   效率   ble   順序   for   while   end   選擇   空間   

什麼是演算法

    就是一個計算的過程,解決問題的方法

用到知識點

    遞迴

        調用自身

        有結束條件

        下次執行相應的複雜度要減少

 

時間複雜度排序(按效率排序)

    O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n2logn)<O(n3)

判斷時間複雜度

    1.迴圈減半的過程就是O(logn)

    2.幾次迴圈就是n的幾次方的複雜度

空間複雜度(以空間換時間)

    評估演算法記憶體佔用大小

 

列表尋找

    順序尋找

        從列表第一個元素開始,順序進行搜尋,直到找到為止。

def linear_seach(data_set,val):    for i in range(5,data_set):        if i == val:            print(i)            return i    return ‘沒找到‘

二分尋找

        從有序列表的候選區data[0:n]開始,通過對待尋找的值與候選區中間值的比較,可以使候選區減少一半。

def bin_seacher(data_set,val):    low = 0    high = len(data_set) - 1    while low <= high:        mid = (low+high) // 2        if data_set[mid] == val:            print(‘索引位置:‘,mid)            return mid        elif data_set[mid] < val:            low = mid + 1        else:            high = mid - 1    print(‘沒有找到‘)    return Noneli = range(100000)bin_seacher(li,557)

案例

import randomdef random_list(n):    ‘‘‘    產生隨機資料    :param n:     :return:     ‘‘‘    ret = []    a1 = [‘趙‘,‘錢‘,‘孫‘,‘李‘,‘鄒‘,‘吳‘,‘鄭‘,‘王‘,‘周‘]    a2 = [‘力‘,‘好‘,‘禮‘,‘麗‘,‘文‘,‘建‘,‘梅‘,‘美‘,‘高‘,‘‘]    a3 = [‘強‘,‘文‘,‘斌‘,‘闊‘,‘文‘,‘瑩‘,‘超‘,‘雲‘,‘龍‘,‘‘]    ids = range(1001,1001+n)    for i in range(n):        name = random.choice(a1) + random.choice(a2) +random.choice(a3)        age = random.randint(18,60)        dic = {‘id‘:ids[i], ‘name‘:name, ‘age‘:age}        ret.append(dic)    return retdef id_seacher(data_list,id):    low = 0    high = len(data_list) - 1    while low <= high:        mid = (low+high) // 2        if data_list[mid][‘id‘] == id:            print(‘索引位置:‘,mid)            return mid        elif data_list[mid][‘id‘] < id:            low = mid + 1        else:            high = mid - 1    print(‘沒有找到‘)    return Nonedata_list = random_list(100)ind = id_seacher(data_list,1025)print(data_list[ind][‘name‘])#輸入人名

冒泡排序

首先,列表每兩個相鄰的數,如果前邊的比後邊的大,那麼交換這兩個數

    迴圈無序區的數繼續比較

import randomdef bubble_sort(li):    for i in range(len(li) - 1):# 幾趟        exchange = False # 標誌位        for j in range(len(li) - i - 1):            if li[j] > li[j + 1]:                li[j], li[j + 1] = li[j + 1], li[j]                exchange = True            if not exchange:                breakli = list(range(1000))random.shuffle(li)print(li)bubble_sort(li)print(li)

時間複雜 

    最好情況 O(n)

    一般情況 O (n2)

    最差情況 O (n2)

選擇排序 

  一趟遍曆記錄最小的數,放到第一個位置;

       再一趟遍曆記錄剩餘列表中最小的數,繼續放置;

 

def select_sort(li):    for i in range(len(li) - 1): #迴圈次數        min_loc = i        for j in range(i + 1,len(li)):#從無序區找            if li[j] < li[min_loc]:                min_loc = j        li[i], li[min_loc] = li[min_loc], li[i]li = list(range(1000))random.shuffle(li)print(li)select_sort(li)print(li)

插入排序    

  列表被分為有序區和無序區兩個部分。最初有序區只有一個元素。

  每次從無序區選擇一個元素,插入到有序區的位置,直到無序區變空。

def insert_sort(li):    for i in range(1,len(li)):        tmp = li[i]        j = i - 1        while j >= 0 and tmp < li[j]:            # 判斷新數是否比前一個數小,小就將前一個數向後挪一個位置            li[j + 1] = li[j]            j -= 1        li[j + 1] = tmpli = list(range(1000))random.shuffle(li)print(li)insert_sort(li)print(li)

 

Python基本常用演算法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.