python常用排序算法的實(shí)現(xiàn)代碼
這篇文章主要介紹了python常用排序算法的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
排序是計(jì)算機(jī)語(yǔ)言需要實(shí)現(xiàn)的基本算法之一,有序的數(shù)據(jù)結(jié)構(gòu)會(huì)帶來效率上的極大提升。
1.插入排序
插入排序默認(rèn)當(dāng)前被插入的序列是有序的,新元素插入到應(yīng)該插入的位置,使得新序列仍然有序。
def insertion_sort(old_list):
n=len(old_list)
k=0
for i in range(1,n):
temp=old_list[i]
j=i
while j>0 and temp<old_list[j-1]:
old_list[j]=old_list[j-1]
j=j-1
old_list[j]=temp
return old_list
2.冒泡排序
冒泡排序的原理是對(duì)序列進(jìn)行遍歷,遍歷過程中如果發(fā)現(xiàn)相鄰兩個(gè)元素,左邊的元素大于右邊,則進(jìn)行交換,一次遍歷之后最大的元素被移動(dòng)到對(duì)尾,然后進(jìn)行第二次遍歷,直到隊(duì)列有序。
def bubble_sort(old_list):
n=len(old_list)
for i in range(n-1):
for j in range(n-1-i):
if old_list[j]>old_list[j+1]:
old_list[j],old_list[j+1]=old_list[j+1],old_list[j]
return old_list
3.快速排序
快速排序的實(shí)現(xiàn)方法是設(shè)置兩個(gè)游標(biāo),一個(gè)從前往后,一個(gè)從后往前,如果左側(cè)游標(biāo)所指數(shù)據(jù)大于右側(cè),兩數(shù)據(jù)進(jìn)行交換,直到兩個(gè)游標(biāo)指向同一數(shù)據(jù),則第一趟遍歷結(jié)束。結(jié)束時(shí)游標(biāo)所在數(shù)據(jù),左側(cè)都比其小,右側(cè)都比其大。
接下來對(duì)游標(biāo)前后的兩個(gè)序列進(jìn)行遞歸操作。
def quick_sort(list,low,high):
i=low
j=high
if i >= j:
return list
key=list[i]
while i < j:
while i < j and list[j]>=key:
j = j - 1
list[i]=list[j]
while i < j and list[i]<=key:
i = i + 1
list[j]=list[i]
list[i]=key
quick_sort(list,low,i-1)
quick_sort(list,j+1,high)
return list
4.選擇排序
選擇排序的原理是是先找到起始數(shù)組中最小的元素,將它交換到i=0;然后尋找剩下元素中最小的元素,將它交換到i=1的位置…… 直到找到第二大的元素,將它交換到n-2的位置。這時(shí),整個(gè)數(shù)組的排序完成。
def select_sort(list):
length=len(list)
for i in range(length):
min_index=i
for j in range(i,length):
if list[j]<list[min_index]:
min_index=j
list[i],list[min_index]=list[min_index],list[i]
return list
5.歸并排序
歸并排序是對(duì)數(shù)組進(jìn)行拆分再拆分,直到不能再拆分,然后分別對(duì)最小粒度的子數(shù)組進(jìn)行合并,然后再合并稍微大一點(diǎn)的數(shù)組,直到最終合成一個(gè)最大的數(shù)組。分兩個(gè)函數(shù)完成,一個(gè)負(fù)責(zé)拆分,一個(gè)負(fù)責(zé)排序合并。
def merge_sort(list):
if len(list)<=1:
return list
mid=int(len(list)/2)
left=merge_sort(list[:mid])
right=merge_sort(list[mid:])
return merge(left,right)
def merge(list1,list2):
list=[]
i,j=0,0
while i<len(list1) and j<len(list2):
if list1[i]<list2[j]:
list.append(list1[i])
i=i+1
elif list1[i]>=list2[j]:
list.append(list2[j])
j=j+1
list.extend(list1[i:])
list.extend(list2[j:])
return list
6.希爾排序
def shell_sort(nums):
step = len(nums)/2
while step > 0:
for i in range(step, len(nums)):
while i >= step and nums[i-step] > nums[i]:
nums[i], nums[i-step] = nums[i-step], nums[i]
i -= step
step = step/2
return nums
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python實(shí)戰(zhàn)之實(shí)現(xiàn)簡(jiǎn)易的學(xué)生選課系統(tǒng)
又到了小伙伴們最喜歡的python實(shí)戰(zhàn)環(huán)節(jié),文中對(duì)實(shí)現(xiàn)簡(jiǎn)易的學(xué)生選課系統(tǒng)作了非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有很好的幫助,需要的朋友可以參考下2021-05-05
PyQt5每天必學(xué)之日歷控件QCalendarWidget
這篇文章主要為大家詳細(xì)介紹了PyQt5每天必學(xué)之日歷控件QCalendarWidget,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04
Python3導(dǎo)入CSV文件的實(shí)例(跟Python2有些許的不同)
今天小編就為大家分享一篇Python3導(dǎo)入CSV文件的實(shí)例(跟Python2有些許的不同),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-06-06
解決多個(gè)@Scheduled定時(shí)任務(wù)執(zhí)行時(shí)個(gè)別不執(zhí)行問題
這篇文章主要介紹了解決多個(gè)@Scheduled定時(shí)任務(wù)執(zhí)行時(shí)個(gè)別不執(zhí)行問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
Python數(shù)據(jù)結(jié)構(gòu)之棧詳解
棧和隊(duì)列是在程序設(shè)計(jì)中常見的數(shù)據(jù)類型,從數(shù)據(jù)結(jié)構(gòu)的角度來講,棧和隊(duì)列也是線性表,是操作受限的線性表。本文將詳細(xì)介紹一下Python中的棧,感興趣的可以了解一下2022-03-03
Python實(shí)現(xiàn)設(shè)置顯示屏分辨率
這篇文章主要為大家詳細(xì)介紹了Python如何調(diào)用win32庫(kù)實(shí)現(xiàn)分辨率獲取和讀寫,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考下2023-01-01
Python實(shí)現(xiàn)socket非阻塞通訊功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)socket非阻塞通訊功能,結(jié)合實(shí)例形式分析了Python使用socket模塊進(jìn)行非阻塞通訊的原理、多線程及客戶端、服務(wù)器端相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-11-11
python求加權(quán)平均值的實(shí)例(附純python寫法)
今天小編就為大家分享一篇python求加權(quán)平均值的實(shí)例(附純python寫法),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-08-08
Python面向?qū)ο笏枷肱c應(yīng)用入門教程【類與對(duì)象】
這篇文章主要介紹了Python面向?qū)ο笏枷肱c應(yīng)用,較為詳細(xì)的分析了Python面向?qū)ο笏枷肱c原理,并結(jié)合實(shí)例形式分析了類與對(duì)象相關(guān)定義、用法及操作注意事項(xiàng),需要的朋友可以參考下2019-04-04

