新手學習python(十三)算法

算法(Algorthm):一個計算過程,解決問題的方法。算法

時間複雜度是用來估計算法運行時間的一個式子(單位)。M個循環,複雜度就是N的M次方。(例如2個for循環,時間複雜度就是N的平方)優化

空間複雜度是用來評估算法佔用內存大小的一個式子。ui

(1)列表排序:將無序的列表變成有序列表。排序

應用場景:各類榜單、各類表單、給二分排序用、給其餘算法用遞歸

A、冒泡排序內存

思路:相鄰的兩個數兩兩對比,若是前面的數大於後面的數,則把前面的數和後面的交換。每一輪排序,最大的數置於最後。it

def bubble_sort(li):io

     for i in range(len(li) -1):for循環

           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:

                return             #加個優化,若是冒泡排序中執行一趟而沒有交換,則表示列表已是有序狀態,能夠直接結束算法

B、選擇排序

思路:一趟遍歷記錄最小的數,放到第一個位置;再一趟遍歷記錄剩餘列表中最小的數,繼續放置。

for 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

            if min_loc != i:

                  li[ i ],li[ min_loc ] = li[ min_loc],li[ i ]

C、插入排序

思路:列表被分爲有序區和無序區兩個部分,最初有序區只有一個元素;每次從無序區選擇一個元素,插入到有序區的位置,直到無序區變空。

def insert_sort(li):

      for i in range(1,len(li)):   #從1開始排序(注意:下標是從0開始)

            tmp = li[ i ]

            j = i -1

            while j >= 0 and tmp < li[ j ]:

                   li[ j +1 ] = li[ j ]

                     j = j - 1

             li[ j+1 ] = tmp 

D、快速排序

思路:取一個元素P(第一個元素),使P歸位;

          列表被P分紅兩部分,左邊都比P小,右邊都比P大;

           遞歸完成排序。

def quick_sort(data,left,right):     #遞歸

       if left < right:

           mid = partition(data,left,right)

           quick_sort(data,left,mid-1)

           quick_sort(data,mid+1,right)

def partition(data,left,right):           #使元素歸位

       tmp = data[left]

       while left < right:

              while left < right and data[right] >=tmp:

                     right -= 1

              data[left] = data[right]

              while left < right and data[left] <=tmp:

                     left +=1

              data[right] = data[left]

         data[left] = tmp

         return left

相關文章
相關標籤/搜索