新手学习python(十三)算法

算法(Algorthm):一个计算过程,解决问题的方法。

时间复杂度是用来估计算法运行时间的一个式子(单位)。

空间复杂度是用来评估算法占用内存大小的一个式子。

(1)列表排序:将无序的列表变成有序列表。

应用场景:各种榜单、各种表单、给二分排序用、给其他算法用

A、冒泡排序

思路:相邻的两个数两两对比,如果前面的数大于后面的数,则把前面的数和后面的交换。每一轮排序,最大的数置于最后。

def 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:

                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)):

            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

猜你喜欢

转载自www.cnblogs.com/bainbian1234/p/9853248.html