您好,登錄后才能下訂單哦!
這篇文章主要介紹了python中5個(gè)常見(jiàn)的排序算法分別是什么,具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。
1、插入排序:每步將一個(gè)待排序的記錄,按其關(guān)鍵碼值的大小插入前面已經(jīng)排序的文件中適當(dāng)位置上,直到全部插入完為止。
代碼如下:
#L=[5,2,3,1,6,9] # def insert_sort(list): # leng=len(list);//求list長(zhǎng)度 # for i in range(1,leng): # temp=list[i];//設(shè)置哨兵 # j=i; # while(j>0 and list[j-1]>temp): # list[j]=list[j-1];//大的元素后移 # j=j-1; # list[j]=temp;//遇到比哨兵小的元素,將其設(shè)置為哨兵 # return list; # print(insert_sort(L))
2、冒泡排序:比較相鄰的元素。如果第一個(gè)比第二個(gè)大,就交換他們兩個(gè)。對(duì)每一對(duì)相鄰元素做同樣的工作,從開(kāi)始第一對(duì)到
結(jié)尾的最后一對(duì)。在這一點(diǎn),最后的元素應(yīng)該會(huì)是最大的數(shù)。針對(duì)所有的元素重復(fù)以上的步驟,除了最后一個(gè)。持續(xù)每次對(duì)越來(lái)
越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對(duì)數(shù)字需要比較。
代碼如下:
# def bubble_sort(list): # leng=len(list); # for i in range(0,leng)://控制趟數(shù) # flag=True # for j in range(1,leng-i): # if list[j-1]>list[j]: # flag=False; # list[j-1],list[j]=list[j],list[j-1];//交換這兩個(gè)數(shù) # if flag: # break # return list; # L=[9,5,6,8,4,2] # print(bubble_sort(L))
3、選擇排序:它的工作原理是每一次從待排序的數(shù)據(jù)元素中選出最小(或最大)的一個(gè)元素,存放在序列的起始位置,直到全
部待排序的數(shù)據(jù)元素排完。 選擇排序是不穩(wěn)定的排序方法(比如序列[5, 5, 3]第一次就將第一個(gè)[5]與[3]交換,導(dǎo)致第一個(gè)5挪動(dòng)到第二個(gè)5后面)。
代碼如下:
# def select_sort(list): # leng=len(list) # for i in range(0,leng): # min=i //設(shè)置哨兵,假設(shè)第一個(gè)元素是最小的 # for j in range(i+1,leng): # if list[j]<list[i]: # min=j //開(kāi)始尋找比哨兵小的元素。如果小則將重新設(shè)置哨兵位置 # if min!=i: # list[i],list[min]=list[min],list[i]#交換這兩個(gè)數(shù) # return list # L=[-4,1,2,5,3,-2]
4、快速排序:它的基本思想是:通過(guò)一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的
所有數(shù)據(jù)都要小,然后再按此方法對(duì)這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,整個(gè)排序過(guò)程可以遞歸進(jìn)行,以此達(dá)到整個(gè)數(shù)據(jù)變成有序序列。
代碼如下:
# def partition(list,low,high)://劃分算法 # key=list[low] # while(low<high): # while(low<high and list[high]>=key):high=high-1 # if low<high: # list[low]=list[high] # low=low+1 # while(low<high and list[low]<=key):low=low+1 # if low<high: # list[high]=list[low] # high=high-1 # list[low]=key # return low # # def quick_sort(list,low,high)://快速排序算法 # if low<high: # pos=partition(list,low,high) # quick_sort(list,low,pos-1) # quick_sort(list,pos+1,high) # return list # L=[45,12,-32,65,28,9,-75,34] # print(quick_sort(L,0,len(L)-1))
5、堆排序:堆排序(Heapsort)是指利用堆積樹(shù)(堆)這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計(jì)的一種排序算法,它是選擇排序的一種。
代碼如下:
#堆排序 # def HeapAdjust(list,pos,len)://調(diào)整堆算法 # lchild=2*pos+1 # rchild=2*pos+2 # min=pos # if pos<(len-1)/2: # if lchild<len and list[lchild]<list[min]: # min=lchild; # if rchild<len and list[rchild]<list[min]: # min=rchild; # if min!=pos: # list[pos],list[min]=list[pos],list[min] # HeapAdjust(list,min,len) # return list # # def BuildHeap(list,len)://建堆算法 # i=len/2-1 # while(i>=0): # HeapAdjust(list,i,len) # i=i-1 # return list # # def Heap_sort(list,len)://堆排序算法 # BuildHeap(list,len) # while(len): # list[0],list[len-1]=list[len-1],list[0] # len=len-1 # HeapAdjust(list,len,0) # return list # # L=[45,12,-32,65,28,9,-75,34] # print(Heap_sort(L,len(L)))
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享python中5個(gè)常見(jiàn)的排序算法分別是什么內(nèi)容對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,遇到問(wèn)題就找億速云,詳細(xì)的解決方法等著你來(lái)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。