新手学习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

相关文章
相关标签/搜索