Python常见算法实现:选择、快速、二分查找、广度优先与贪婪算法

周叙
周叙
发布时间:2026-10-14 | 2人浏览过
原创

本文汇总了Python中五种常见算法的实现方法,包括选择排序、快速排序、二分查找、广度优先搜索及贪婪算法。详细解析了各算法的工作原理、适用场景及时间复杂度,并提供完整的Python代码示例,帮助开发者理解并应用这些基础算法解决实际问题。

选择排序算法实现

1、选择排序

选择排序是一种直观且基础的排序算法。其核心逻辑是:在未排序的序列中找出最小(或最大)的元素,将其放置到已排序序列的起始位置;随后从剩余未排序元素中继续寻找最小(或最大)元素,放置到已排序序列的末尾。这一过程重复执行,直至所有元素完成排序。具体实现代码如下:


#找到最小的元素def FindSmall(list):
  min=list[0]  for i in range(len(list)):    if list[i]<min:
      min=list[i]  return min    

#选择排序def Select_Sort(list):
  newArr=[]  for i in range(len(list)):
    minValue=FindSmall(list)
    newArr.append(minValue)
    list.remove(minValue)  return newArr

testArr=[11,22,33,21,123]print(Select_Sort(testArr))

快速排序算法实现

2、快速排序

快速排序的执行效率通常高于选择排序。其工作原理如下:假设待排序数组为N,首先任意选取一个数据(通常选择数组的第一个元素)作为基准值(pivot)。接着,将所有小于基准值的元素移至其左侧,所有大于基准值的元素移至其右侧,此过程称为一趟快速排序。利用Python递归方式实现该算法的代码如下:


def Quick_Sort(list):  if len(list)<2:    return list  else:
    temp=list[0]
    less=[i for i in list[1:] if i<=temp]
    more=[i for i in list[1:] if i>temp]    return Quick_Sort(less)+[temp]+Quick_Sort(more)

testArr= [13,44,53,24,876,2]print(Quick_Sort(testArr))

二分查找算法原理与代码

3、二分查找

二分查找适用于输入为有序列表的场景,若目标元素存在于该有序列表中,该算法可返回其索引位置。举例说明:假设心中想一个1至100之间的整数,由你猜测。若从1开始逐个递增猜测,最坏情况下需猜100次(如目标为100);若采用二分策略,先猜50,根据反馈“大了”或“小了”排除一半数据,再猜75等,即可快速逼近目标。相比简单查找最多需要n步,二分查找在包含n个元素的有序列表中最多仅需log2 n步,效率显著提升。Python实现代码如下:


def Item_Search(list,item):
  low=0
  high=len(list)-1  while low<=high:
    middle=(low+high)//2    print(list[middle])    if list[middle]>item:
      high=middle-1    elif list[middle]<item:
      low=middle+1    else:      return middle  return None    

test_list=[1,3,5,7,9,11,13,15,17,19,21]
Item_Search(test_list,11)

广度优先搜索应用

4、广度优先搜索

广度优先搜索(BFS)是一种图遍历算法,图由节点和边构成,节点之间通过边连接,相连的节点互为邻居。BFS主要解决两类问题:一是判断从节点A到节点B是否存在路径;二是找出从节点A到节点B的最短路径。需注意,BFS仅适用于非加权图(即边无权重);若边有权重,应使用狄克斯特拉算法。例如,已知人际关系网络:你认识Alice、Bob、Claire;Bob认识Anuj、Peggy;Alice认识Peggy;Claire认识Tom、Jonny。若需在最短路径内通过熟人找到Tom,算法实现如下:


#使用字典构建图graph={}
graph["you"]=["Alice","Bob","Claire"]
graph["Bob"]=["Anuj","Peggy"]
graph["Alice"]=["Peggy"]
graph["Claire"]=["Tom","Jonny"]
graph["Anuj"]=[]
graph["Peggy"]=[]
graph["Tom"]=[]
graph["Jonny"]=[]from collections import deque#简单的判断方法def person_is_seller(name):  return name=='Tom'def Search(name):
  searched=[]  #用于记录检查过的人,防止进入死循环
  search_queue=deque() #创建队列
  search_queue+=graph[name]  while search_queue:
    person=search_queue.popleft()    if not person in searched:  #仅当这个人没检查过时才检查
      if person_is_seller(person):        print("the seller is {0}".format(person))        return True      else:
        search_queue+=graph[person]
        searched.append(person)  #将这个人标记为检查过
  return Falseprint(Search("you"))

贪婪算法近似求解

5、贪婪算法

贪婪算法(又称贪心算法)常用于解决NP完全问题等缺乏高效精确算法的场景,属于近似算法。它通过寻找局部最优解来试图获得全局最优解,具有实现简单、运行速度快的特点。例如,假设你是小偷,商店有多种箱子,箱内装有不同种类的水果(部分箱子含3种,部分含2种等)。若想尝遍所有种类的水果,但体力有限需搬运最少箱子,贪婪算法可帮助确定最优选择。具体实现代码如下:


fruits=set(["苹果","香蕉","梨子","西瓜","草莓","橘子","荔枝","榴莲"]) 

#箱子以及包含的水果box={}
box["b1"]=set(["苹果","香蕉","西瓜"])
box["b2"]=set(["草莓","橘子","榴莲"])
box["b3"]=set(["梨子","荔枝","草莓"])
box["b4"]=set(["香蕉","橘子"])
box["b5"]=set(["梨子","榴莲"])

final_boxs=set() #最终选择的箱子#直到fruits为空while fruits:
  best_box=None #包含了最多的未包含水果的箱子
  fruits_covered=set() #包含该箱子包含的所有未包含的水果

  #循环迭代每个箱子,并确定它是否为最佳箱子
  for boxItem,fruitItem in box.items():
    covered=fruits & fruitItem #计算交集
    if len(covered)>len(fruits_covered): 
      best_box=boxItem
      fruits_covered=covered
  fruits-=fruits_covered
  final_boxs.add(best_box)   
print(final_boxs)

以上就是Python几种常见算法汇总的详细内容,更多关于Python算法汇总的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表