




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第python數(shù)據(jù)結(jié)構(gòu)的排序算法(1)算法思想
第1趟,在待排序記錄r1~r[n]中選出最小的記錄,將它與r1交換;第2趟,在待排序記錄r2~r[n]中選出最小的記錄,將它與r2交換;以此類推,第i趟在待排序記錄r[i]~r[n]中選出最小的記錄,將它與r[i]交換,使有序序列不斷增長(zhǎng)直到全部排序完畢
(2)python實(shí)現(xiàn)代碼
defselect_sort(slist):
foriinrange(len(slist)-1):
x=i
forjinrange(i,len(slist)):
ifslist[j]slist[x]:
x=j
slist[i],slist[x]=slist[x],slist[i]
returnslist
2、堆排序(利用最大堆和最小堆的特性)
(1)算法思想
它是選擇排序的一種。可以利用數(shù)組的特點(diǎn)快速定位指定索引的元素。堆分為大根堆和小根堆,是完全二叉樹。大根堆的要求是每個(gè)節(jié)點(diǎn)的值都不大于其父節(jié)點(diǎn)的值。在數(shù)組的非降序排序中,需要使用的就是大根堆,因?yàn)楦鶕?jù)大根堆的要求可知,最大的值一定在堆頂
(2)python實(shí)現(xiàn)代碼
importmath
defheap_sort(a):
al=len(a)
defheapify(a,i):
left=2*i+1
right=2*i+2
largest=i
ifleftalanda[left]a[largest]:
largest=left
ifrightalanda[right]a[largest]:
largest=right
iflargest!=i:
a[i],a[largest]=a[largest],a[i]
heapify(a,largest)
#建堆
foriinrange(math.floor(len(a)/2),-1,-1):
heapify(a,i)
#不斷調(diào)整堆:根與最后一個(gè)元素
foriinrange(len(a)-1,0,-1):
a[0],a[i]=a[i],a[0]
al-=1
heapify(a,0)
returna
四、歸并排序
(1)算法思想
采用分治法(DivideandConquer)的一個(gè)非常典型的應(yīng)用。將已有序的子序列合并,得到完全有序的序列;即先使每個(gè)子序列有序,再使子序列段間有序。若將兩個(gè)有序表合并成一個(gè)有序表,稱為二路歸并
(2)python實(shí)現(xiàn)代碼
defmerge_sort(a):
if(len(a)2):
returna
middle=len(a)//2
left,right=a[0:middle],a[middle:]
returnmerge(merge_sort(left),merge_sort(right))
defmerge(left,right):
result=[]
whileleftandright:
ifleft[0]=right[0]:
result.append(left.pop(0));
else:
result.append(right.pop(0));
whileleft:
result.append(left.pop(0));
whileright:
result.append(right.pop(0));
returnresult
五、其他排序
1、計(jì)數(shù)排序(字典計(jì)數(shù)-還原)
(1)算法思想
計(jì)數(shù)排序的核心在于將輸入的數(shù)據(jù)值轉(zhuǎn)化為鍵存儲(chǔ)在額外開辟的數(shù)組空間中。作為一種線性時(shí)間復(fù)雜度的排序,計(jì)數(shù)排序要求輸入的數(shù)據(jù)必須是有確定范圍的整數(shù)。
(2)python實(shí)現(xiàn)代碼
defcountingSort(arr,maxValue):
bucketLen=maxValue+1
bucket=[0]*bucketLen
sortedIndex=0
arrLen=len(arr)
foriinrange(arrLen):
ifnotbucket[arr[i]]:
bucket[arr[i]]=0
bucket[arr[i]]+=1
forjinrange(bucketLen):
whilebucket[j]0:
arr[sortedIndex]=j
sortedIndex+=1
bucket[j]-=1
returnarr
2、桶排序(鏈表)
(1)算法思想
為了節(jié)省空間和時(shí)間,我們需要指定要排序的數(shù)據(jù)中最小以及最大的數(shù)字的值。將數(shù)組分到有限數(shù)量的桶子里。每個(gè)桶子再個(gè)別排序(有可能再使用別的排序算法或是以遞歸方式繼續(xù)使用桶排序進(jìn)行排序)
(2)python實(shí)現(xiàn)代碼
defbucketSort(nums):
bucket=[0]*(max(nums)-min(nums)+1)
foriinrange(len(nums)):
bucket[nums[i]-min(nums)]+=1
tmp=[]
foriinrange(len(bucket)):
ifbucket[i]!=0:
tmp+=[min(nums)+i]*bucket[i]
returntmp
3、基數(shù)排序
(1)算法思想
基數(shù)排序?qū)?shù)據(jù)按位進(jìn)行分桶,然后將桶中的數(shù)據(jù)合并。每次分桶只關(guān)注其中一位數(shù)據(jù),其他位的數(shù)據(jù)不管,最大的數(shù)據(jù)有多少位,就進(jìn)行多少次分桶和合并。由于整數(shù)也可以表達(dá)字符串(比如名字或日期)和特定格式的浮點(diǎn)數(shù),所以基數(shù)排序也不是只能使用于整數(shù)。
(2)python實(shí)現(xiàn)代碼
defradix_sort(array):
bucket,digit=[[]],0
whilelen(bucket[0])!=len(array):
bucket=[[],[],[],[],[],[],[],[],[],[]]
foriinrange(len(array)):
num=(array[i]//10**digit)%10
bucket[num].append(array[i])
array.cle
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 從信息安全到透明化看區(qū)塊鏈在金融領(lǐng)域的應(yīng)用
- 醫(yī)療行業(yè)電子病歷系統(tǒng)升級(jí)的商業(yè)模式探討
- 2025年中學(xué)消防應(yīng)急疏散總結(jié)模版
- 新生兒低血鈣的臨床護(hù)理
- 利用大數(shù)據(jù)分析提升公共衛(wèi)生中的疾病預(yù)防效率
- 公司車輛轉(zhuǎn)讓協(xié)議合同范例
- 醫(yī)療設(shè)備的成本控制與經(jīng)濟(jì)效益分析
- 會(huì)員入股協(xié)議合同范例
- 財(cái)務(wù)部半度總結(jié)模版
- 債權(quán)傭金合同范例
- JB-T 4088.1-2022 日用管狀電熱元件 第1部分:通用要求
- RLC串聯(lián)電路暫態(tài)研究
- 《實(shí)數(shù)》單元作業(yè)設(shè)計(jì)
- 圍手術(shù)期血糖的管理專家講座
- 干濕法脫硫運(yùn)行經(jīng)濟(jì)成本對(duì)比(自動(dòng)計(jì)算)
- 運(yùn)輸與配送管理選擇題復(fù)習(xí)題庫(kù)
- 線性代數(shù)矩陣
- S22天天高速安慶至潛山段(涼亭至月山)環(huán)境影響報(bào)告書
- 某廠蒸汽管道安裝吹掃及試運(yùn)行方案
- 清華大學(xué)出版社機(jī)械制圖習(xí)題集參考答案(課堂PPT)
- 安徽金軒科技有限公司 年產(chǎn)60萬(wàn)噸硫磺制酸項(xiàng)目環(huán)境影響報(bào)告書
評(píng)論
0/150
提交評(píng)論