日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《大话数据结构》第9章 排序 9.8 归并排序(下)

發(fā)布時(shí)間:2025/3/21 编程问答 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《大话数据结构》第9章 排序 9.8 归并排序(下) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

9.8.3?歸并排序復(fù)雜度分析

????????我們來分析一下歸并排序的時(shí)間復(fù)雜度,一趟歸并需要將SR[1]~SR[n]中相鄰的長(zhǎng)度為h的有序序列進(jìn)行兩兩歸并。并將結(jié)果放到TR1[1]~TR1[n]中,這需要將待排序序列中的所有記錄掃描一遍,因此耗費(fèi)O(n)時(shí)間,而由完全二叉樹的深度可知,整個(gè)歸并排序需要進(jìn)行?log2n?趟,因此,總的時(shí)間復(fù)雜度為O(nlogn),而且這是歸并排序算法中最好、最壞、平均的時(shí)間性能。
????????由于歸并排序在歸并過程中需要與原始記錄序列同樣數(shù)量的存儲(chǔ)空間存放歸并結(jié)果以及遞歸時(shí)深度為log2n的棧空間,因此空間復(fù)雜度為O(n+logn)。
????????另外,對(duì)代碼進(jìn)行仔細(xì)研究,發(fā)現(xiàn)Merge函數(shù)中有if (SR[i]<SR[j])語句,這就說明它需要兩兩比較,不存在跳躍,因此歸并排序是一種穩(wěn)定的排序算法。
????????也就是說,歸并排序是一種比較占用內(nèi)存,但卻效率高且穩(wěn)定的算法。


9.8.4?非遞歸實(shí)現(xiàn)歸并排序
????????
我們常說,“沒有最好,只有更好。”歸并排序大量引用了遞歸,盡管在代碼上比較清晰,容易理解,但這會(huì)造成時(shí)間和空間上的性能損耗。我們排序追求的就是效率,有沒有可能將遞歸轉(zhuǎn)化成迭代呢?結(jié)論當(dāng)然是可以的,而且改動(dòng)之后,性能上進(jìn)一步提高了。來看代碼。

/* 對(duì)順序表L作歸并非遞歸排序 */ void MergeSort2(SqList *L) {int* TR=(int*)malloc(L->length * sizeof(int)); /* 申請(qǐng)額外空間 */int k=1;while(k<L->length){MergePass(L->r,TR,k,L->length);k=2*k; /* 子序列長(zhǎng)度加倍 */MergePass(TR,L->r,k,L->length);k=2*k; /* 子序列長(zhǎng)度加倍 */ } }

1)?程序開始執(zhí)行,數(shù)組L為{50,10,90,30,70,40,80,60,20},L.length=9。
2)?第3行,我們事先申請(qǐng)了額外的數(shù)組內(nèi)存空間,用來存放歸并結(jié)果。
3)?第5~11行,是一個(gè)while循環(huán),目的就不斷的歸并有序序列。注意k值的變化,第8行與第10行,在不斷循環(huán)中,它將由1→2→4→8→16,跳出循環(huán)。
4)?第7行,此時(shí)k=1,MergePass函數(shù)將原來的無序數(shù)組兩兩歸并入TR,此函數(shù)代碼稍后再講。如圖9-8-11。
?


5)?第8行,k=2
6)?第9行,MergePass函數(shù)將TR中已經(jīng)兩兩歸并的有序序列再次歸并回?cái)?shù)組L.r中,如圖9-8-12。
?

7)?第10行,k=4,因?yàn)閗<9,所以繼續(xù)循環(huán),再次歸并,最終執(zhí)行完第7~10行,k=16,結(jié)束循環(huán),完成排序工作。如圖9-8-13。
?

????????從代碼中,我們能夠感受到,非遞歸的迭代做法更加直截了當(dāng),從最小的序列開始?xì)w并直至完成。不需要像歸并的遞歸算法一樣,需要先拆分遞歸,再歸并退出遞歸。
????????現(xiàn)在我們來看MergePass代碼是如何實(shí)現(xiàn)的。

?

/* 將SR[]中相鄰長(zhǎng)度為s的子序列兩兩歸并到TR[] */ void MergePass(int SR[],int TR[],int s,int n) {int i=1;int j;while(i <= n-2*s+1) { Merge(SR,TR,i,i+s-1,i+2*s-1); /* 兩兩歸并 */i=i+2*s; }if(i<n-s+1) /* 歸并最后兩個(gè)序列 */Merge(SR,TR,i,i+s-1,n);else /* 若最后只剩下單個(gè)子序列 */for(j =i;j <= n;j++)TR[j] = SR[j]; }

1)?程序執(zhí)行。我們第一次調(diào)用“MergePass(L.r,TR,k,L.length);”,此時(shí)L.r是初始無序狀態(tài),TR為新申請(qǐng)的空數(shù)組,k=1,L.length=9。
2)?第5~9行,循環(huán)的目的就兩兩歸并,因s=1,n-2*s+1=8,為什么循環(huán)i從1到8,而不是9呢?就是因?yàn)閮蓛蓺w并,最終9條記錄定會(huì)剩下來,無法歸并。
3)?第7行,Merge函數(shù)我們前面已經(jīng)詳細(xì)講過,此時(shí)i=1,i+s-1=1,i+2*s-1=2。也就是說,我們將SR(即L.r)中的第一個(gè)和第二個(gè)記錄歸并到TR中。然后第8行,i=i+2*s=3,再循環(huán),我們就是將第三個(gè)和第四個(gè)記錄歸并到TR中,一直到第七和第八個(gè)記錄完成歸并。如圖9-8-14。
?


4)?第10~14行,主要是處理最后的尾數(shù)的,第11行是說將最后剩下的多個(gè)記錄歸并到TR中。不過由于i=9,n-s+1=9,因此執(zhí)行第13~14行,將20放入到TR數(shù)組的最后。
?

?

5)?再次調(diào)用MergePass時(shí),s=2,第5~9行的循環(huán),由第8行的i=i+2*s可知,此時(shí)i就是以4為增量進(jìn)行循環(huán)了。也就是說,是將兩個(gè)有兩個(gè)記錄的有序序列進(jìn)行歸并為四個(gè)記錄的有序序列。最終再將最后剩下的第九條記錄“20”插入TR。
?


6)?后面的類似,略。
????????非遞歸的迭代方法,避免了遞歸時(shí)深度為log2n的棧空間,空間只是用到申請(qǐng)歸并臨時(shí)用的TR數(shù)組,因此空間復(fù)雜度為O(n)。并且避免遞歸也在時(shí)間性能上有一定的提升,應(yīng)該說,使用歸并排序時(shí),盡量考慮用非遞歸方法。? 出處:http://www.cnblogs.com/cj723/archive/2011/04/26/2026886.html

總結(jié)

以上是生活随笔為你收集整理的《大话数据结构》第9章 排序 9.8 归并排序(下)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: mm1313亚洲精品| 蜜臀久久99精品久久久久久 | 天天干,天天操,天天射 | 经典av在线| jizz免费| 无码国产精品一区二区色情男同 | 国产一区二区自拍视频 | 亚洲欧美精品一区 | 高hnp视频| 午夜视频在线免费观看 | 青青操国产 | 男女午夜视频 | 国产精品大片 | 可以在线看黄的网站 | 97人人澡| 国产欧美日韩专区 | 亚洲综合激情五月久久 | 开心激情播播网 | 亚洲色图欧美另类 | 亚洲激情文学 | 成人污视频 | 免费的毛片视频 | 免费的三级网站 | 污视频免费在线观看 | 欧美在线一 | 日本在线色 | 熟女一区二区三区四区 | 国产精品看片 | 日本电影一区二区三区 | 九九综合九九综合 | 精品人伦一区二区三区 | 午夜精品三级久久久有码 | aa在线| 国产人妖在线 | www.久热| 7777精品视频 | 黄色二级毛片 | 欧美精品久久久久久久自慰 | 亚洲精品国产无码 | 国产免费av一区 | 美女让男生桶 | 五月在线 | 国产香蕉在线观看 | 一区二区三区高清 | 中文字幕第五页 | 一级大片免费观看 | 91麻豆一区二区三区 | 成人午夜视频免费看 | 亚洲成人激情在线 | 91精品国产电影 | ass精品国模裸体欣赏pics | 国产精品久久久久久久久久辛辛 | 亚洲精品一区二区三区中文字幕 | 亚洲在线免费观看视频 | 性色欲情网站iwww九文堂 | 无码国产精品一区二区色情男同 | 午夜小电影| 色性av| 自拍第二页 | 国产一区二区三区播放 | eeuss日韩| 日本无遮羞调教打屁股网站 | 欧美aa| 国产一区精品视频 | 成年人色片| 国产精品久久久久电影 | 岛国黄色片| 成人丁香婷婷 | 天天干天天操天天碰 | 17c在线视频 | 碧蓝之海动漫在线观看免费高清 | 超碰97干| 欧美一区二区三区久久综合 | 爱爱视频免费看 | 日本中文字幕在线看 | 国产成人无码AA精品区 | 九色91视频 | 亚洲观看黄色网 | 午夜亚洲| 浪漫樱花在线观看高清动漫 | 欧美jizz19性欧美 | 成人中文网 | 男女视频免费观看 | av在线免费播放网站 | 伊人久综合| 毛色毛片 | 欧美日韩国产免费一区二区三区 | 欧美成人精品二区三区99精品 | 可以免费看污视频的网站 | 欧美日韩国产不卡 | 国产午夜麻豆影院在线观看 | 免费精品在线观看 | 九九视频免费 | 欧美一区二区三区久久妖精 | av色吧| 少妇av | 日本免费在线一区 | 91青青视频 | 中国少妇乱子伦视频播放 |