




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第python數據結構的排序算法(1)算法思想
第1趟,在待排序記錄r1~r[n]中選出最小的記錄,將它與r1交換;第2趟,在待排序記錄r2~r[n]中選出最小的記錄,將它與r2交換;以此類推,第i趟在待排序記錄r[i]~r[n]中選出最小的記錄,將它與r[i]交換,使有序序列不斷增長直到全部排序完畢
(2)python實現代碼
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)算法思想
它是選擇排序的一種。可以利用數組的特點快速定位指定索引的元素。堆分為大根堆和小根堆,是完全二叉樹。大根堆的要求是每個節點的值都不大于其父節點的值。在數組的非降序排序中,需要使用的就是大根堆,因為根據大根堆的要求可知,最大的值一定在堆頂
(2)python實現代碼
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)
#不斷調整堆:根與最后一個元素
foriinrange(len(a)-1,0,-1):
a[0],a[i]=a[i],a[0]
al-=1
heapify(a,0)
returna
四、歸并排序
(1)算法思想
采用分治法(DivideandConquer)的一個非常典型的應用。將已有序的子序列合并,得到完全有序的序列;即先使每個子序列有序,再使子序列段間有序。若將兩個有序表合并成一個有序表,稱為二路歸并
(2)python實現代碼
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、計數排序(字典計數-還原)
(1)算法思想
計數排序的核心在于將輸入的數據值轉化為鍵存儲在額外開辟的數組空間中。作為一種線性時間復雜度的排序,計數排序要求輸入的數據必須是有確定范圍的整數。
(2)python實現代碼
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)算法思想
為了節省空間和時間,我們需要指定要排序的數據中最小以及最大的數字的值。將數組分到有限數量的桶子里。每個桶子再個別排序(有可能再使用別的排序算法或是以遞歸方式繼續使用桶排序進行排序)
(2)python實現代碼
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、基數排序
(1)算法思想
基數排序將數據按位進行分桶,然后將桶中的數據合并。每次分桶只關注其中一位數據,其他位的數據不管,最大的數據有多少位,就進行多少次分桶和合并。由于整數也可以表達字符串(比如名字或日期)和特定格式的浮點數,所以基數排序也不是只能使用于整數。
(2)python實現代碼
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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年車載空氣凈化器合作協議書
- 網絡軟件開發及運維服務協議細節
- 建筑行業施工資質認定證明(7篇)
- 酒店業智能客房服務系統設計與實施策略制定方案
- 農業合作社財務管理制度合作協議書
- 軟件定制開發與軟件工程化解決方案
- 三方停車場車位租賃協議
- 商業場所裝修設計與施工合同協議
- 2025年農村房屋買賣合同范本「常用」
- 2025配電箱租賃合同范本
- 2025年湖北荊州市監利市暢惠交通投資有限公司招聘筆試參考題庫含答案解析
- 酒店入股合同協議書
- 銀行sql考試題及答案
- 2025-2030中國聚苯醚行業市場發展趨勢與前景展望戰略研究報告
- 2025閩教版英語三年級下冊單詞表
- 全套教學課件《工程倫理學》
- 江蘇省建筑與裝飾工程計價定額(2014)電子表格版
- 中智公司招聘西飛筆試題
- 全國職業院校技能大賽高職組汽車檢測與維修賽項競賽試題答案集
- 《2021國標電氣弱電圖集資料》88D369電氣設備在輕鋼龍骨隔墻及吊頂上的安裝
- 六年級數學解方程計算題100道
評論
0/150
提交評論