主講大二上數(shù)算ds chsort_第1頁(yè)
主講大二上數(shù)算ds chsort_第2頁(yè)
主講大二上數(shù)算ds chsort_第3頁(yè)
主講大二上數(shù)算ds chsort_第4頁(yè)
主講大二上數(shù)算ds chsort_第5頁(yè)
已閱讀5頁(yè),還剩38頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

88“數(shù)據(jù)結(jié)構(gòu)與算法”教學(xué)高等教育出版社,20086主要內(nèi)排序方主要內(nèi)排序方選擇排序(堆排序排序算法的時(shí)間代2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao2交換排基本思交換排基本思包冒泡排序快速排序2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao3快速排Top10Algorithmsofthe20th年提出快速排Top10Algorithmsofthe20th年提出算法思采用分治(Divide-and-conquer)的設(shè)計(jì)方法,將待排元選擇軸值將序列劃分為兩個(gè)子序LR,使L所有記錄都小于或等于軸值,R中記錄都大于軸值對(duì)子序列L和R歸進(jìn)行快速排2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao4分治策略的基本分治策略的基本思分治策略的實(shí)基本步分——?jiǎng)澐肿訂?wèn)治——求解子問(wèn)題(子問(wèn)題不重疊合——綜合2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao52945最終排序結(jié)果2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao62945最終排序結(jié)果2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao6軸值選盡可能軸值選盡可能使L,R長(zhǎng)度相選擇策選擇最左邊記隨機(jī)選選擇平均2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao7分割過(guò)程整個(gè)快速分割過(guò)程整個(gè)快速排序的關(guān)軸值位于最終該待的位置,分割后L中所有記錄位于軸值左R中記錄位于軸值右2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao8選擇并存儲(chǔ)軸重復(fù)上一步直到i==j,將軸值選擇并存儲(chǔ)軸重復(fù)上一步直到i==j,將軸值放到i的位置ij2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao9快速排序算template<classvoidQuickSort快速排序算template<classvoidQuickSort(RecordArray[],intleft,intright)Array[]為待排序數(shù)組,left,rightif(right<=left)intpivot=SelectPivot(left,right);swap(Array,pivot,right);pivot=Partition(Array,left,right);QuickSort(Array,left,pivot-1);QuickSort(Array,pivot+1,right);}intSelectPivot(intleft,intright)return}2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao分割函template<classintPartition(RecordArray[],intleft,intright)分割分割函template<classintPartition(RecordArray[],intleft,intright)分割后軸值已到達(dá)正確位intl=lintr=rRecordTempRecord=while(l!=r)lrwhile(Array[lTempRecord&&rllif(l<r)Array[r]=Array[l];未相遇,將逆置元素?fù)Q到右邊空//r}//r指針向左移動(dòng),直到找到一個(gè)大于軸值的記while(Array[r]>=TempRecord&&r>l)if(l<r)Array[l]=Array[r];}}//endArray[l]=未相遇,將逆置元素?fù)Q到左空l(shuí)lreturn 2014FallDataStructures&AlgorithmbyHaiyan快速排序時(shí)間代長(zhǎng)度為n的快速排序時(shí)間代長(zhǎng)度為n的序列,時(shí)間為T(mén)(0)=T(1)選擇軸值時(shí)間為常分割時(shí)間in-i-T(iT(n-1-求解遞推方T(n)T(i)T(n1i)2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao快速排序最差情T(mén)快速排序最差情T(mén)(n)T(n1)T(n1)T(n2)c(nT(n2)T(n3)c(nT(2)T(1)總的時(shí)間代價(jià)為nT(n)T(1)ci(n2i2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao快速排序最佳情T(mén)(n)2T(n/2)TT(n/cnn/T(n快速排序最佳情T(mén)(n)2T(n/2)TT(n/cnn/T(n/T(n/cn/T(n/n/T(n/cn/n/8T21lognTT(1)clogn1T(n)cnlognn(nlog2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao快速排序平均情況:等概率分T(i)和快速排序平均情況:等概率分T(i)和T(n-1-i)的平均值均T(i)T(n1i)1T(knk代入方T(n)T(i)T(n1i)得T(n)cn1(T(k)T(n1k))cn2T(knnkk2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao快速排序平均情況:等概率分上式乘以nT(n快速排序平均情況:等概率分上式乘以nT(n)cn22T(kk帶入n-2T(k(n1)T(n1)c(nk上述二式相nT(n)(n1)T(n1)2cnn(n+1),并忽略常數(shù)系上式兩邊同時(shí)除T(n)T()nnn2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao快速排序平均情況:等概率分T(n)T(n-1)快速排序平均情況:等概率分T(n)T(n-1)nnnT(n1)T(n-2)nnnT(2)T(1)323T(n)(nlog2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao快速排序分最差情快速排序分最差情時(shí)間代價(jià):空間代價(jià):最佳情空間代價(jià):Θ(log平均情時(shí)間代價(jià):Θ(nlog空間代價(jià):Θ(log2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao算法分穩(wěn)定算法分穩(wěn)定可能優(yōu)化2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao優(yōu)化的快速排#defineTHRESHOLD28template優(yōu)化的快速排#defineTHRESHOLD28template<classRecord>voidModQuickSort(RecordArray[],intleft,intright)if(right-left+1>THRESHOLD)intpivot=SelectPivot(left,right);swap(Array,pivot,right);pivot=Partition(Array,left,right);ModQuickSort(Array,left,pivot-1);ModQuickSort(Array,pivot+1,right);}//將軸值放在數(shù)組末理理}2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao優(yōu)化的快速排優(yōu)化的快速排template<classvoidQuickSort(Record*Array,intn)ModQuickSort(Array,0,n-1);InsertSort(Array,n);}2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao思冒泡排序和思冒泡排序和直接選擇排序哪個(gè)更快速排序?yàn)槭裁床环€(wěn)快速排序可能的優(yōu)(28?消除遞歸(2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao歸并排算歸并排算法思2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao歸并思341278)(34’治合為3234’2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao歸并思341278)(34’治合為3234’2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao歸并排要求待排序集合歸并排要求待排序集合已部分排利用歸并的思想可實(shí)現(xiàn)排2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao兩路歸并排template<classvoid兩路歸并排template<classvoidMergeSort(RecordArray[],RecordTempArray[],intleft,intright){Array為待排序數(shù)組,left,right兩端intmiddle;if(leftright){列中只有0或1個(gè)記錄,不用排middle=(left+right)///平分為兩個(gè)子序//對(duì)左邊一半進(jìn)行遞//對(duì)右邊一半進(jìn)行遞MergeSort(Array,TempArray,middle+1,right);Merge(ArrayTempArray,left,right,middle并}}2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao歸并函兩個(gè)有序子序列都從左向右掃描,歸并到新數(shù)template<class歸并函兩個(gè)有序子序列都從左向右掃描,歸并到新數(shù)template<classvoidMerge(RecordArray[],RecordTempArray[],intleft,intright,intmiddle)inti,j,index1,index2;{for(j=left;j<=right;TempArray[j]=Array[j];index1=left;index2=//將數(shù)組暫存入臨時(shí)數(shù)//左邊子序列的起始位//右邊子序列的起始位i=while(index1<=middle&&index2<=right)if(TempArray[index1]<=Array[i++]=TempArray[index1++];elseArray[i++]=TempArray[index2++];//取較小者插入合并數(shù)組}while(index1<=只剩左序列,可以直接復(fù)Array[i++]=while(index2<= 與上個(gè)循環(huán)互斥,復(fù)制右序Array[i++]=}2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao歸并排序時(shí)間代歸并排序時(shí)間代由三部分組T(n)2T(n/2)T(1)=Θ(nlog2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao歸并排序分歸并排序的歸并排序分歸并排序的比較次數(shù)很接近理論上的最優(yōu)O(NlogN)1.1583N2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao歸并排序分空間代價(jià)歸并排序分空間代價(jià)時(shí)間代價(jià)時(shí)間代價(jià)均為Θ(nlogn)穩(wěn)優(yōu)化的可2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhaoR.Sedgewick優(yōu)化歸341232)(7832)(7832122014FallDataStructures&AlgorithmAnalysisbyHaiyanZhaoR.Sedgewick優(yōu)化歸341232)(7832)(7832122014FallDataStructures&AlgorithmAnalysisbyHaiyanZhaoR.Sedgewick優(yōu)化歸k2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhaoR.Sedgewick優(yōu)化歸k2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao優(yōu)化的歸并排#defineTHRESHOLD28template<classRecord>優(yōu)化的歸并排#defineTHRESHOLD28template<classRecord>intright)//Array為待排序數(shù)組,left,rightintif(right-left+1>THRESHOLD)middle=(left+right)///從中間劃為兩個(gè)子序ModMergeSort(Array,TempArrayModMergeSort(Array,TempArray//對(duì)相鄰的有序序列進(jìn)行歸ModMerge(Array,TempArray}elseInsertSort(&Array[left],right-//小序列插入排}2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao優(yōu)化的歸并函template<classRecord>優(yōu)化的歸并函template<classRecord>voidModMerge(RecordArray[],RecordTempArray[],intleft,intright,intmiddle){inti,j,k;for(i=left;i<=middle;i++)TempArray[i]=Array[i];for(j=1;j<=right-middle;//兩個(gè)子序列的起始位//復(fù)制左邊的子序//顛倒復(fù)制右序TempArray[right-j+1]=for(index1=left,index2=right,k=left;k<=right;k++)if(TempArray[index1]<=TempArray[index2])Array[k]=TempArray[index1++];Array[k]=TempArray[index2--}2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao思普通歸并算法都思普通歸并算法都是穩(wěn)定的嗎兩個(gè)歸并算法哪個(gè)更優(yōu)2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao排序算法小特點(diǎn)排序算法小特點(diǎn)復(fù)雜度核心操作Suchalgorithmsrequirespecialassumptionsregardingthetypeand/orrangeofthekeyvaluestobesorted2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao其他排序方日常實(shí)其他排序方日常實(shí)作者姓名分類(lèi),首字母,從左到[23,123,234,567,3]=>[123,23,234,3,[023,123,234,567,003]=>[003,023,123,234,2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao分配排序和基數(shù)排分配排序和基數(shù)排不需要進(jìn)行記錄間兩兩比需要事先知道記錄序列的一些具體基本思主要介紹兩2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao桶式排桶式排2014FallDataStructures&AlgorithmAnalysisbyHaiyanZhao桶式排序示count[i]=count[i-1]+count730819641829待排數(shù)組23567每個(gè)桶count+++前若干桶0桶式排序示count[i]=count[i-1]+count730819641829待排數(shù)組23567每個(gè)桶count+++前若干桶01234567892014FallDataStructures&AlgorithmAnalysisbyHaiya

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論