版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
選擇排序
選擇排序是指在排序過程序中,依次從待排序的記錄序列中選擇出關(guān)鍵字值最小的記錄、關(guān)鍵字值次小的記錄、……,并分別將它們定位到序列左側(cè)的第1個位置、第二個位置、……,最后剩下一個關(guān)鍵字值最大的記錄位于序列的最后一個位置,從而使待排序的記錄序列成為按關(guān)鍵字值由小到大排列的的有序序列。簡單選擇排序1.簡單選擇排序的基本思想
每一趟在n-i+1(i=1,2,3,...,n-1)個記錄中選取關(guān)鍵字最小的記錄作為有序序列中的第i個記錄。它的具體實現(xiàn)過程為:(1)將整個記錄序列劃分為有序區(qū)域和無序區(qū)域,有序區(qū)域位于最左端,無序區(qū)域位于右端,初始狀態(tài)有序區(qū)域為空,無序區(qū)域含有待排序的所有n個記錄。(2)設(shè)置一個整型變量index,用于記錄在一趟的比較過程中,當(dāng)前關(guān)鍵字值最小的記錄位置。開始將它設(shè)定為當(dāng)前無序區(qū)域的第一個位置,即假設(shè)這個位置的關(guān)鍵字最小,然后用它與無序區(qū)域中其他記錄進(jìn)行比較,若發(fā)現(xiàn)有比它的關(guān)鍵字還小的記錄,就將index改為這個新的最小記錄位置,隨后再用a[index].key與后面的記錄進(jìn)行比較,并根據(jù)比較結(jié)果,隨時修改index的值,一趟結(jié)束后index中保留的就是本趟選擇的關(guān)鍵字最小的記錄位置。(3)將index位置的記錄交換到無序區(qū)域的第一個位置,使得有序區(qū)域擴展了一個記錄,而無序區(qū)域減少了一個記錄。不斷重復(fù)(2)、(3),直到無序區(qū)域剩下一個記錄為止。此時所有的記錄已經(jīng)按關(guān)鍵字從小到大的順序排列就位。
簡單選擇排序算法簡單選擇排序的整體結(jié)構(gòu)應(yīng)該為:for(i=1;i<n;i){
第i趟簡單選擇排序;}
下面我們進(jìn)一步分析一下“第i趟簡單選擇排序”的算法實現(xiàn)。(1)初始化:假設(shè)無序區(qū)域中的第一個記錄為關(guān)鍵字值最小的元素,即將index=i;
下面我們進(jìn)一步分析一下“第i趟簡單選擇排序”的算法實現(xiàn)。(2)搜索無序區(qū)域中關(guān)鍵字值最小的記錄位置:
for(j=i+1;j<=n;j++) if(a[j].key<a.[index].ke)index=j;
下面我們進(jìn)一步分析一下“第i趟簡單選擇排序”的算法實現(xiàn)。(3)將無序區(qū)域中關(guān)鍵字最小的記錄與無序區(qū)域的第一個記錄進(jìn)行交換,使得有序區(qū)域由原來的i-1個記錄擴展到i個記錄。
完整算法voidselecsort(DataTypea,intn){for(i=1;i<n;i++) //對n個記錄進(jìn)行n-1趟的簡單選擇排序
{index=i; //初始化第i趟簡單選擇排序的最小記錄指針
for(j=i+1;j<=n;j++) //搜索關(guān)鍵字最小的記錄位置
if(a[j].key<a[i].key)index=j;if(index!=i){temp=a[i];a[i]=a[index];a[index]=temp; }}}簡單選擇排序算法簡單,但是速度較慢,并且是一種不穩(wěn)定的排序方法.,但在排序過程中只需要一個用來交換記錄的暫存單元。堆排序1.堆排序的基本思想:堆排序是另一種基于選擇的排序方法。下面我們先介紹一下什么是堆?然后再介紹如何利用堆進(jìn)行排序。
2.堆定義:
由n個元素組成的序列{k1,k2,……,kn-1,kn},當(dāng)且僅當(dāng)滿足如下關(guān)系時,稱之為堆。例如序列(47,35,27,26,18,7,13,19)滿足:
若將堆看成是一棵以k1為根的完全二叉樹,則這棵完全二叉樹中的每個非終端結(jié)點的值均不大于(或不小于)其左、右孩子結(jié)點的值。由此可以看出,若一棵完全二叉樹是堆,則根結(jié)點一定是這n個結(jié)點中的最小者或最大者。下面給出兩個堆的示例。下面我們討論一下如何利用堆進(jìn)行排序?從堆的定義可以看出,若將堆用一棵完全二叉樹表示,則根結(jié)點是當(dāng)前堆中所有結(jié)點的最小者(或最大者)。堆排序的基本思想是:首先將待排序的記錄序列構(gòu)造一個堆,此時,選出了堆中所有記錄的最小者或最大者,然后將它從堆中移走,并將剩余的記錄再調(diào)整成堆,這樣又找出了次小(或次大)的記錄,以此類推,直到堆中只有一個記錄為止,每個記錄出堆的順序就是一個有序序列。堆排序的篩選算法:voidsift(DataTypea,intk,intm){i=k;;j=2*i;temp=a[i];
while(j<=m)//{if(j<m&&a[j].key<a[j+1].key)j++;if(a[i].key>a[j].key)break;
else{a[i]=a[j];i=j;j=2*i;}}a[i]=temp;}堆排序完整的算法:voidheapsort(DataTypea,intn){h=n/2;//最后一個非終端結(jié)點的編號
for(i=h;i>=1;i--)//初建堆。從最后一個非終端結(jié)點至根結(jié)點
sift(a,i,n);for(i=n;i>1;i--)//重復(fù)執(zhí)行移走堆頂結(jié)點及重建堆的操作
{temp=a[1];a[1]=a[i];a[i]=temp;sift(a,1,i-1);}}
在堆排序中,除建初堆以外,其余調(diào)整堆的過程最多需要比較樹深次,因此,與
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年國家知識產(chǎn)權(quán)局專利局專利審查協(xié)作四川中心公開招聘工作人員40人備考題庫參考答案詳解
- 2025年重慶護(hù)理職業(yè)學(xué)院(第一批)公開招聘工作人員備考題庫及答案詳解參考
- 北京市懷柔區(qū)2026年國有企業(yè)管培生公開招聘21人備考題庫及參考答案詳解一套
- 2025年曲靖市富源縣公安局后所派出所招聘警務(wù)輔助人員備考題庫及一套完整答案詳解
- 2025上海交通大學(xué)醫(yī)學(xué)院附屬瑞金醫(yī)院婦產(chǎn)科(超聲)醫(yī)療崗位招聘備考題庫附答案
- 2025年西安曲江新區(qū)社區(qū)醫(yī)療中心招聘5人備考題庫及一套答案詳解
- 2025年寧夏吳忠市單招職業(yè)傾向性考試題庫附答案
- 污水廠安全協(xié)議書
- 汽油票租賃協(xié)議書
- 汽車變更合同范本
- 客戶開發(fā)與客戶維護(hù)課件
- STM32理論課件教學(xué)課件
- 交通運輸行業(yè)數(shù)據(jù)集建設(shè)實施方案
- 測繪安全培訓(xùn)課件圖片
- 民族團(tuán)結(jié)教學(xué)課件
- 嚴(yán)格電話使用管理辦法
- (2025年標(biāo)準(zhǔn))簡單砌石墻協(xié)議書
- (2025年標(biāo)準(zhǔn))鐵路實習(xí)協(xié)議書
- 重慶市涪陵榨菜集團(tuán)股份有限公司營運能力分析
- 與4s店二手車合作合同協(xié)議
- 《中華民族共同體概論》考試復(fù)習(xí)題庫(含答案)
評論
0/150
提交評論