电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

python語言中有算法嗎

瀏覽:102日期:2022-07-21 09:15:42

了解算法之前,我們先看一下什么是算法

定義:算法(Algorithm)是指解題方案的準確而完整的描述,是一系列解決問題的清晰指令,算法代表著用系統的方法描述解決問題的策略機制。也就是說,能夠對一定規范的輸入,在有限時間內獲得所要求的輸出。如果一個算法有缺陷,或不適合于某個問題,執行這個算法將不會解決這個問題。不同的算法可能用不同的時間、空間或效率來完成同樣的任務。一個算法的優劣可以用空間復雜度與時間復雜度來衡量。

python中的常見算法

冒泡排序

效率:O(n2)

原理:

比較相鄰的元素,如果第一個比第二個大,就交換他們兩個;

對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最后一對。做完以后,最后的元素會是最大的數,這里可以理解為走了一趟;

針對所有的元素重復以上的步驟,除了最后一個;

持續每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較,最后數列就是從大到小一次排列;

def bubble_sort(data): ''' 冒泡排序 :param data: :return: ''' for i in range(len(data)-1): # 趟數 for j in range(len(data)-i-1): # 遍歷數據,依次交換 if data[j]>data[j+1]: # 當較大數在前面data[j],data[j+1]=data[j+1],data[j] #交換兩個數的位置 if __name__==’__main__’: import random data_list=list(range(30)) random.shuffle(data_list) print('pre:',data_list) bubble_sort(data_list) print('after:',data_list)#結果:#pre: [22, 11, 19, 16, 12, 18, 20, 28, 27, 4, 21, 10, 9, 7, 1, 6, 5, 29, 8, 0, 17, 26, 13, 14, 15, 24, 25, 23, 3, 2]#after: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]

選擇排序

效率:O(n2)

原理:

每一次從待排序的列表中選出一個元素,并將其與其他數依次比較,若列表中的某個數比選中的數小,則交換位置,把所有數比較完畢,則會選出最小的數,將其放在最左邊(這一過程稱為一趟);

重復以上步驟,直到全部待排序的數據元素排完;

demo:

def select_sort(data): ''' 選擇排序 :param data: 待排序的數據列表 :return: ''' for i in range(len(data)-1): #趟數 min_index=i # 記錄i趟開始最小的數的索引,我們從最左邊開始 for j in range(i+1,len(data)): # 每一次趟需要循環的次數 if data[j] < data[min_index]: # 當數列中的某一個數比開始的數要小時候,更新最小值索引位置min_index=j data[i],data[min_index]=data[min_index],data[i] # 一趟走完,交換最小值的位置,第一趟最小if __name__==’__main__’: import random data_list=list(range(30)) random.shuffle(data_list) # 打亂列表數據 print('pre:',data_list) select_sort(data_list) print('after:',data_list)#結果:#pre: [20, 11, 22, 0, 18, 21, 14, 19, 7, 23, 27, 29, 24, 4, 17, 15, 5, 10, 26, 13, 25, 1, 8, 16, 3, 9, 2, 28, 12, 6]#after: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]

插入排序

效率:O(n2)

原理:

以從小到大排序為例,元素0為第一個元素,插入排序是從元素1開始,盡可能插到前面。

插入時分插入位置和試探位置,元素i的初始插入位置為i,試探位置為i-1,在插入元素i時,依次與i-1,i-2······元素比較,如果被試探位置的元素比插入元素大,那么被試探元素后移一位,元素i插入位置前移1位,直到被試探元素小于插入元素或者插入元素位于第一位。

重復上述步驟,最后完成排序

demo:

def insert_sort(data): ''' 插入排序 :param data: 待排序的數據列表 :return: ''' for i in range(1, len(data)): # 無序區域數據 tmp = data[i] # 第i次插入的基準數 for j in range(i, -1, -1): if tmp < data[j - 1]: # j為當前位置,試探j-1位置data[j] = data[j - 1] # 移動當前位置 else: # 位置確定為jbreak data[j] = tmp # 將當前位置數還原 if __name__==’__main__’: import random data_list=list(range(30)) random.shuffle(data_list) # 打亂列表數據 print('pre:',data_list) insert_sort(data_list) print('after:',data_list)#結果:#pre: [7, 17, 10, 16, 23, 24, 13, 11, 2, 5, 15, 29, 27, 18, 4, 19, 1, 9, 3, 21, 0, 14, 12, 25, 22, 28, 20, 6, 26, 8]#after: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]

堆排序

堆定義:本質是一個完全二叉樹,如果根節點的值是所有節點的最小值稱為小根堆,如果根節點的值是所有節點的最大值,稱為大根堆。

效率:O(nlogn)

原理:

將待排序數據列表建立成堆結構(建立堆);

通過上浮(shift_up)或下沉(shift_down)等操作得到堆頂元素為最大元素(已大根堆為例);

去掉堆頂元素,將最后的一個元素放到堆頂,重新調整堆,再次使得堆頂元素為最大元素(相比第一次為第二大元素);

重復3操作,直到堆為空,最后完成排序;

歸并排序

效率:O(nlogn)

空間復雜度:O(n)

原理:

申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合并后的序列;

設定兩個指針,最初位置分別為兩個已經排序序列的起始位置;

比較兩個指針所指向的元素,選擇相對小的元素放入到合并空間,并移動指針到下一位置;

重復步驟3直到某一指針達到序列尾;

將另一序列剩下的所有元素直接復制到合并序列尾。

到此這篇關于python語言中有算法嗎的文章就介紹到這了,更多相關python里有算法嗎內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 自动化改造_智虎机器人_灌装机_贴标机-上海圣起包装机械 | 披萨石_披萨盘_电器家电隔热绵加工定制_佛山市南海区西樵南方综合保温材料厂 | 回转炉,外热式回转窑,回转窑炉-淄博圣元窑炉工程有限公司 | 防腐储罐_塑料储罐_PE储罐厂家_淄博富邦滚塑防腐设备科技有限公司 | 潍坊大集网-潍坊信息港-潍坊信息网 | 中医中药治疗血小板减少-石家庄血液病肿瘤门诊部 | 自清洗过滤器,浅层砂过滤器,叠片过滤器厂家-新乡市宇清净化 | 西安烟道厂家_排气道厂家_包立管厂家「陕西西安」推荐西安天宇烟道 | 模具ERP_模具管理系统_模具mes_模具进度管理_东莞市精纬软件有限公司 | 跨境物流_美国卡派_中大件运输_尾程派送_海外仓一件代发 - 广州环至美供应链平台 | 云杂志网-学术期刊-首页| 安徽净化板_合肥岩棉板厂家_玻镁板厂家_安徽科艺美洁净科技有限公司 | 存包柜厂家_电子存包柜_超市存包柜_超市电子存包柜_自动存包柜-洛阳中星 | 电线电缆厂家|沈阳电缆厂|电线厂|沈阳英联塑力线缆有限公司 | 水冷散热器_水冷电子散热器_大功率散热器_水冷板散热器厂家-河源市恒光辉散热器有限公司 | 碳化硅,氮化硅,冰晶石,绢云母,氟化铝,白刚玉,棕刚玉,石墨,铝粉,铁粉,金属硅粉,金属铝粉,氧化铝粉,硅微粉,蓝晶石,红柱石,莫来石,粉煤灰,三聚磷酸钠,六偏磷酸钠,硫酸镁-皓泉新材料 | 煤矿人员精确定位系统_矿用无线通信系统_煤矿广播系统 | 「安徽双凯」自动售货机-无人售货机-成人用品-自动饮料食品零食售货机 | 北京翻译公司-专业合同翻译-医学标书翻译收费标准-慕迪灵 | 液压油缸-液压缸厂家价格,液压站系统-山东国立液压制造有限公司 液压油缸生产厂家-山东液压站-济南捷兴液压机电设备有限公司 | 球磨机 选矿球磨机 棒磨机 浮选机 分级机 选矿设备厂家 | 北京租车公司_汽车/客车/班车/大巴车租赁_商务会议/展会用车/旅游大巴出租_北京桐顺创业租车公司 | 菲希尔X射线测厚仪-菲希尔库伦法测厚仪-无锡骏展仪器有限责任公司 | 【铜排折弯机,钢丝折弯成型机,汽车发泡钢丝折弯机,线材折弯机厂家,线材成型机,铁线折弯机】贝朗折弯机厂家_东莞市贝朗自动化设备有限公司 | 安徽控制器-合肥船用空调控制器-合肥家电控制器-合肥迅驰电子厂 安徽净化板_合肥岩棉板厂家_玻镁板厂家_安徽科艺美洁净科技有限公司 | 附着力促进剂-尼龙处理剂-PP处理剂-金属附着力处理剂-东莞市炅盛塑胶科技有限公司 | 开云(中国)Kaiyun·官方网站-登录入口 | 中国品牌门窗网_中国十大门窗品牌_著名门窗品牌 | 微妙网,专业的动画师、特效师、CG模型设计师网站! - wmiao.com 超声波电磁流量计-液位计-孔板流量计-料位计-江苏信仪自动化仪表有限公司 | MES系统-WMS系统-MES定制开发-制造执行MES解决方案-罗浮云计算 | 磁力去毛刺机_去毛刺磁力抛光机_磁力光饰机_磁力滚抛机_精密金属零件去毛刺机厂家-冠古科技 | 东莞ERP软件_广州云ERP_中山ERP_台湾工厂erp系统-广东顺景软件科技有限公司 | 【孔氏陶粒】建筑回填陶粒-南京/合肥/武汉/郑州/重庆/成都/杭州陶粒厂家 | 云南丰泰挖掘机修理厂-挖掘机维修,翻新,再制造的大型企业-云南丰泰工程机械维修有限公司 | 细胞染色-流式双标-试剂盒免费代做-上海研谨生物科技有限公司 | 新型锤式破碎机_新型圆锥式_新型颚式破碎机_反击式打沙机_锤式制砂机_青州建源机械 | 北京工业设计公司-产品外观设计-产品设计公司-千策良品工业设计 北京翻译公司-专业合同翻译-医学标书翻译收费标准-慕迪灵 | 灰板纸、灰底白、硬纸板等纸品生产商-金泊纸业 | 龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司_龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司 | 盘扣式脚手架-附着式升降脚手架-移动脚手架,专ye承包服务商 - 苏州安踏脚手架工程有限公司 | 济南玻璃安装_济南玻璃门_济南感应门_济南玻璃隔断_济南玻璃门维修_济南镜片安装_济南肯德基门_济南高隔间-济南凯轩鹏宇玻璃有限公司 |