各種排序方法復(fù)雜度總結(jié)_第1頁(yè)
各種排序方法復(fù)雜度總結(jié)_第2頁(yè)
各種排序方法復(fù)雜度總結(jié)_第3頁(yè)
各種排序方法復(fù)雜度總結(jié)_第4頁(yè)
各種排序方法復(fù)雜度總結(jié)_第5頁(yè)
已閱讀5頁(yè),還剩5頁(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)介

1、精品文檔2016全新精品資料-全新公文范文-全程指導(dǎo)寫(xiě)作-獨(dú)家原創(chuàng) / 8各種排序方法復(fù)雜度總結(jié)在C中,排序算法是最基本最常用的算法,不同的排序 算法在不同的場(chǎng)景或應(yīng)用中會(huì)有不同的表現(xiàn),接下來(lái)小編搜 集了各種排序方法復(fù)雜度總結(jié),歡迎查看。一、冒泡排序主要思路是:通過(guò)交換相鄰的兩個(gè)數(shù)變成小數(shù)在前大數(shù)在后,這樣每次遍歷后,最大的數(shù)就“沉”到最后面了。重復(fù)N次即可以使數(shù)組有序。代碼實(shí)現(xiàn)void bubble_sort ( int arr , int len )for (int i = 0; i for (intj = len 1; j = i; j )if ( arrj int temp = arr

2、j;arrj = arrj 1;arrj 1 = temp;冒泡排序改進(jìn)1:在某次遍歷中,如果沒(méi)有數(shù)據(jù)交換,說(shuō)明整個(gè)數(shù)組已經(jīng) 有序,因此通過(guò)設(shè)置標(biāo)志位來(lái)記錄此次遍歷有無(wú)數(shù)據(jù)交換就 可以判斷是否要繼續(xù)循環(huán)。冒泡排序改進(jìn)2:記錄某次遍歷時(shí)最后發(fā)生數(shù)據(jù)交換的位置,這個(gè)位置之 后的數(shù)據(jù)顯然已經(jīng)有序。因此設(shè)置標(biāo)志位記錄每次遍歷中最 后發(fā)生數(shù)據(jù)交換的位置可以確定下次循環(huán)的范圍。二、直接插入排序主要思路是:每次將一個(gè)待排序的數(shù)組元素,插入到前面已排序的序 列中這個(gè)元素應(yīng)該在的位置,直到全部數(shù)據(jù)插入完成。類似 撲克牌洗牌過(guò)程。代碼實(shí)現(xiàn)void _sort( int arr, int len )for(int

3、i = 1; i int j =:i 1;int k :=arri;while ( j 1 & k arrj + 1 = arrj;arrj + 1 = k;三、直接選擇排序主要思路是:數(shù)組分成有序區(qū)和無(wú)序區(qū),初始時(shí)整個(gè)數(shù)組都是無(wú)序 區(qū),每次遍歷都從無(wú)序區(qū)選擇一個(gè)最小的元素直接放在有序 區(qū)最后,直到排序完成。代碼實(shí)現(xiàn)void select_sort( int arr , int len )for (int i = 0; i int index = i;for ( int j = i + 1; j if ( arrj index = j;if ( index ! = i )int temp =

4、arri;arri = arrindex;arrindex = temp;四、快速排序主要思路是:“挖坑填數(shù)+分治法”,首先令i = L;j = R ;將ai 挖出形成打一個(gè)坑,稱ai為基準(zhǔn)數(shù)。然后j從后向前找到一個(gè)比基準(zhǔn)數(shù)小的數(shù),挖出來(lái)填到ai的坑中,這樣aj就形成了一個(gè)新的坑,再 i+從前向后找到一個(gè)比基準(zhǔn) 數(shù)大的數(shù)填到aj坑中。重復(fù)進(jìn)行這種挖坑填數(shù),直到 i = j。這時(shí)ai形成了一個(gè)新的坑,將基數(shù)填到ai坑中,這樣i之前的數(shù)都比基準(zhǔn)數(shù)小,i之后的數(shù)都比基準(zhǔn)數(shù)大。因 此將數(shù)組分成兩部分再分別重復(fù)上述步驟就完成了排序。代碼實(shí)現(xiàn)void quick_sort ( int arr , int

5、left , int right )if(leftint i =left,j = right,target = arrleft;while(iwhile(itarget )精品文檔if(iarri+ = arrj;2016全新精品資料-全新公文范文-全程指導(dǎo)寫(xiě)作-獨(dú)家原創(chuàng) / 8while (i i+;if(iarrj = arri;arri = target;quick_sort(arr , left, i 1 );quick_sort(arr , i + 1, right );五、希爾排序主要思路是:先將整個(gè)待排元素序列分割成若干個(gè)子序列(由相隔某 個(gè)“增量”的元素組成的)分別進(jìn)行直接插入

6、排序,然后依 次縮減增量再進(jìn)行排序,待整個(gè)序列中的元素基本有序(增 量足夠小)時(shí),再對(duì)全體元素進(jìn)行一次直接插入排序。由于 希爾排序是對(duì)相隔若干距離的數(shù)據(jù)進(jìn)行直接插入排序,因此 可以形象的稱希爾排序?yàn)椤疤濉?。六、歸并排序主要思路是:當(dāng)一個(gè)數(shù)組左邊有序,右邊也有序,那合并這兩個(gè)有序 數(shù)組就完成了排序。如何讓左右兩邊有序了?用遞歸!這樣8/9( xepuFpue ;ui ” xepuFpejs 屮! jje_duuej 屮! jjb 屮!) ios_e6jeuj piOA !ijje_dujei =F|JJe f !xepu!_peis = f 6 o = !) oj !+(jJe = +|jj

7、e_dujej f) e|iqM !+ijje = +|jje_dujej !)Q|!MM !+ijje = +|jje_dujej esp !+(jJe = +|jje_dujej(!le i 屮!! l + xepuFpiuj = f ”xepuFpejs = i ;ui( xepuFpue ;ui ” xepuFpiuj ;ui ” xepuFpejs;ui jje_duuej 屮! jjb 屮! ) e6jeuu piOA。冒弭北可者犀卑丁北呂精品文檔2016全新精品資料-全新公文范文-全程指導(dǎo)寫(xiě)作-獨(dú)家原創(chuàng) / 8if (start_index int mid_index =(sta

8、rt_index + end_index ) / 2;merge_sort ( arr , temp_arr , start_index , mid_index );merge_sort ( arr , temp_arr , mid_index + 1 , end_index );merge (arr , temp_arr , start_index , mid_index , end_index );七、堆排序堆排序的難點(diǎn)就在于堆的的插入和刪除。堆的插入就是一一每次插入都是將新數(shù)據(jù)放在數(shù)組最后,而從這個(gè)新數(shù)據(jù)的父結(jié)點(diǎn)到根結(jié)點(diǎn)必定是一個(gè)有序的數(shù) 列,因此只要將這個(gè)新數(shù)據(jù)插入到這個(gè)有序數(shù)列中即可。堆的刪除就是一一堆的刪除就是將最后一個(gè)數(shù)據(jù)的值賦給根結(jié)點(diǎn),然后再?gòu)母Y(jié)點(diǎn)開(kāi)始進(jìn)行一次從上向下的調(diào) 整。調(diào)整時(shí)先在左右兒子結(jié)點(diǎn)中找最小的,如

溫馨提示

  • 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)論