版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1排序2
排序是計算機程序設計中的一種重要操作。功能:是將一個數(shù)據(jù)元素的任意序列,重新排列成一個按關鍵字有序的序列。學習和研究各種排序方法是計算機工作者的重要課題之一。2.8排序2.8.1概述3其確切定義如下:
輸入:n個記錄R1,R2,…,Rn,其相應的關鍵字分別為K1,K2,…,Kn。輸出:Ril,Ri2,…,Rin,使得Ki1≤Ki2≤…≤Kin。(或Ki1≥Ki2≥…≥Kin)。2.8排序2.8.1概述42.8.2插入排序直接插入、折半插入1、直接插入排序基本思想:是將一個記錄插入到已排好序的有序表中,從而得到一個新的,記錄數(shù)增1的有序表。待排元素序列:[53]2736156942第一次排序:[2753]36156942第二次排序:[273653]156942第三次排序:[15273653]6942第四次排序:[1527365369]42第五次排序:[152736425369]
5voidlnsertSort(SeqListR[],intn){//按遞增序進行插入排序inti,j;for(i=2;i<=n;i++)//依次插入R[2],…,R[n]if(R[i]<R[i-1]){ R[0]=R[i];j=i-1;//R[0]是哨兵,且是R[i]的副本
do
{//從右向左在有序區(qū)R[1..i-1]中查找R[i]的插入位置
R[j+1]=R[j];//將關鍵字大于R[i]的記錄后移
j--;
}while(R[0]<R[j]);
//當R[0]≥R[j]時終止
R[j+1]=R[0];//R[i]插入到正確的位置上
}
}//InsertSort6例:有6個記錄,前5個已排序的基礎上,對第6個記錄排序。[1527365369]42
low
mid
high[1527365369]42
low
high
mid[1527365369]42
high
low[152736425369]2、折半插入排序折半插入排序在尋找插入位置時,利用折半查找的原理尋找插入位置,不是逐個比較。7voidBlnsertSort(SeqListL[],intn){//按遞增序進行折半插入排序inti,j,low,high,mid;for(i=2;i<=n;++i)//{L[0]=L[i];Low=1;high=i-1;while(low<=high){
mid=(low+high)/2;
if(L[0]<L[mid])high=mid-1; elselow=mid+1;
}
for(j=i-1;j>=high+1;--j)L[j+1]=L[j]; L[high+1]=L[0];
}}82.8.3選擇排序
1、簡單選擇排序思想:首先從1~n個元素中選出關鍵字最小的記錄交換到第一個位置上。然后從第2個到第n個元素中選出次小的記錄交換到第2個位置上,依次類推。初態(tài)83916839168391683916ijkijkijkijk1
3986互換ijk1
3986ikj1
3986ikj第一趟第二趟1
3986ikj第三趟9voidSelectSort(intP[],intn){inti,j,k,t;for(i=0;i<n-1;++i)
{k=i;
for(j=i+1;j<=n-1;++j)if(P[j]<P[k])k=j;
//P[k]中存放的是第I小的元素
if(k!=i){t=P[i];P[i]=P[k];P[k]=t;}//交換
}}10堆定義
n個關鍵字序列Kl,K2,…,Kn稱為堆,當且僅當該序列滿足如下性質(簡稱為堆性質):
(1)ki≤K2i且ki≤K2i+1或(2)Ki≥K2i且ki≥K2i+1(1≤i≤n/2)
若將此序列所存儲的向量K[1..n]看做是一棵完全二叉樹的存儲結構,則堆實質上是滿足如下性質的完全二叉樹:樹中任一非葉結點的關鍵字均不大于(或不小于)其左右孩子(若存在)結點的關鍵字。2
堆排序堆排序(HeapSorting)是利用堆的特性進行排序的過程。堆排序包括構成初始堆和利用堆排序這兩個階段。11
2
堆排序A、堆的示例
897624331510(a):堆頂元素取最大值112536497856(b):堆頂元素取最小值12B、實現(xiàn)堆排序需解決兩個問題:
(1)如何由一個無序序列建成一個堆?(2)輸出堆頂元素后,如何將剩余元素調(diào)整成一個新的堆?13堆排序的方法方法:將一個無序序列以完全二叉樹表示,從完全二叉樹的非葉子結點(下標為n的父結點)開始,向前逐個進行,直到根結點為止,對每個結點調(diào)整建堆.調(diào)整堆的方法:(以堆頂元素為最小)
總是將根結點的值與左右子樹根結點值進行比較,若不滿足堆條件,則將左右子樹根結點中的小者與根結點值交換,一直做到所有子樹均為堆為止.14由無序序列建初始堆的過程2556497811654136(a)無序序列n=8,int(n/2)=4開始2556493611654178(b)2556413611654978(c)2511413656654978(d)(e)1125413656654978152.8.4交換排序
1、冒泡排序4936416511第六趟排序后第五趟排序后第四趟排序后第三趟排序后第二趟排序后第一趟排序后初始關鍵字783665364156364165413641561178363641491156492525251149495611111125252525思想:小的浮起,大的沉底。16#defineLEN5main(){inta[LEN];inti,j,temp;printf("Pleaseinput%dfigures:",LEN);for(i=0;i<LEN;i++)scanf("%d",&a[i]);
for(i=1;i<LEN;i++)/*共進行LEN-1輪起泡*/{for(j=0;j<LEN-i;j++)/*每次起泡要進行LEN-i次置換*/if(a[j]>a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}}for(i=0;i<LEN;i++)printf("%d",a[i]);}
17快速排序是對冒泡排序的一種改進。它的基本思想是:通過一趟排序將要排序的數(shù)據(jù)分割成獨立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一不部分的所有數(shù)據(jù)都要小,然后再按次方法對這兩部分數(shù)據(jù)分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數(shù)據(jù)變成有序序列。2352667182.8.4交換排序
2、快速排序18intpartition(RedTypeL[],intlow,inthigh){//L[0]=L[low];Key=L[low].key;while(low<high){
while(low<high&&L[high].key>=key)--high;L[low]=L[high];
while(low<high&&L[low].key<=ke
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度木工班組承包節(jié)能減排合同范本3篇
- 二零二五年度農(nóng)業(yè)廢棄物回收與資源化利用合作合同4篇
- 2025年度個人設備租賃融資借款合同樣本4篇
- 二零二五年度旅游品牌授權合同3篇
- 2025年版1A10415國際貿(mào)易實務質量檢驗合同3篇
- 2025年度鋼釘鐵釘智能倉儲與銷售合同
- 2025年度派遣數(shù)據(jù)分析師勞務合同4篇
- 二零二五版南京琴行教師教學成果轉化合同4篇
- 2025年度農(nóng)業(yè)綠色生產(chǎn)技術培訓場地租賃合同6篇
- 2025年度水電設施智能化升級承包合同3篇
- 2025年度公務車輛私人使用管理與責任協(xié)議書3篇
- 經(jīng)濟學基礎試題及答案 (二)
- 售后工程師述職報告
- 綠化養(yǎng)護難點要點分析及技術措施
- 2024年河北省高考歷史試卷(含答案解析)
- 車位款抵扣工程款合同
- 小學六年級數(shù)學奧數(shù)題100題附答案(完整版)
- 高中綜評項目活動設計范文
- 英漢互譯單詞練習打印紙
- 2023湖北武漢華中科技大學招聘實驗技術人員24人筆試參考題庫(共500題)答案詳解版
- 一氯二氟甲烷安全技術說明書MSDS
評論
0/150
提交評論