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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言归并排序代码详细注释,C语言实现排序算法之归并排序详解

發布時間:2025/5/22 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言归并排序代码详细注释,C语言实现排序算法之归并排序详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

排序算法中的歸并排序(Merge Sort)是利用"歸并"技術來進行排序。歸并是指將若干個已排序的子文件合并成一個有序的文件。

一、實現原理:

1、算法基本思路

設兩個有序的子文件(相當于輸入堆)放在同一向量中相鄰的位置上:R[low..m],R[m+1..high],先將它們合并到一個局部的暫存向量R1(相當于輸出堆)中,待合并完成后將R1復制回R[low..high]中。

(1)合并過程

合并過程中,設置i,j和p三個指針,其初值分別指向這三個記錄區的起始位置。合并時依次比較R[i]和R[j]的關鍵字,取關鍵字較小的記錄復制到R1[p]中,然后將被復制記錄的指針i或j加1,以及指向復制位置的指針p加1。

重復這一過程直至兩個輸入的子文件有一個已全部復制完畢(不妨稱其為空),此時將另一非空的子文件中剩余記錄依次復制到R1中即可。

最后,將結果賦值的R[]中。

(2)動態申請R1

實現時,R1是動態申請的,因為申請的空間可能很大,故須加入申請空間是否成功的處理。

二、3種方法實現:

算法1:歸并函數都動態分配一個數組,兩個有序數組合并成一個有序數組

算法2:

程序開始處就動態分配一個大數組,避免每次都要創建很多小數組,釋放內存的時候,不會立即釋放。

算法3:

程序開始處分配一個大的數組,只是每次用array[]將數據給tmp[]排好序后,最后再將tmp[]給array[]賦值,這樣就能完成每次調用的時候,入口都一樣。

實現方法二:

歸并排序:將一個無序數組合并成一個有序數組

有兩種實現方法:自底向上和自頂向下

1、 自底向上的方法(自底向上的歸并排序算法雖然效率較高,但可讀性較差。)

(1) 自底向上的基本思想:

自底向上的基本思想是:第1趟歸并排序時,將待排序的文件R[1..n]看作是n個長度為1的有序子文件,將這些子文件兩兩歸并,若n為偶數,則得到n/2個長度為2的有序子文件;若n為奇數,則最后一個子文件輪空(不參與歸并)。故本趟歸并完成后,前logn個有序子文件長度為2,但最后一個子文件長度仍為1;第2趟歸并則是將第1趟歸并所得到的logn個有序的子文件兩兩歸并,如此反復,直到最后得到一個長度為n的有序文件為止。

上述的每次歸并操作,均是將兩個有序的子文件合并成一個有序的子文件,故稱其為"二路歸并排序"。類似地有k(k>2)路歸并排序。

(2) 一趟歸并算法

分析:

在某趟歸并中,設各子文件長度為length(最后一個子文件的長度可能小于length),則歸并前R[1..n]中共有 個有序的子文件:R[1..length],R[length+1..2length],…

注意:

調用歸并操作將相鄰的一對子文件進行歸并時,必須對子文件的個數可能是奇數、以及最后一個子文件的長度小于length這兩種特殊情況進行特殊處理:

① 若子文件個數為奇數,則最后一個子文件無須和其它子文件歸并(即本趟輪空);

② 若子文件個數為偶數,則要注意最后一對子文件中后一子文件的區間上界是n。

具體算法如下:

2、自頂向下的方法

采用分治法進行自頂向下的算法設計,形式更為簡潔。

(1)分治法的三個步驟

設歸并排序的當前區間是R[low..high],分治法的三個步驟是:

①分解:將當前區間一分為二,即求分裂點:mid = (low+high)/2;

②求解:遞歸地對兩個子區間R[low..mid]和R[mid+1..high]進行歸并排序;

③組合:將已排序的兩個子區間R[low..mid]和R[mid+1..high]歸并為一個有序的區間R[low..high]。

遞歸的終結條件:子區間長度為1(一個記錄自然有序)。

具體算法:

三:分析

1、穩定性

歸并排序是一種穩定的排序。

2、存儲結構要求

可用順序存儲結構。也易于在鏈表上實現。

3、時間復雜度

對長度為n的文件,需進行lgn趟二路歸并,每趟歸并的時間為O(n),故其時間復雜度無論是在最好情況下還是在最壞情況下均是O(nlgn)。

4、空間復雜度

需要一個輔助向量來暫存兩有序子文件歸并的結果,故其輔助空間復雜度為O(n),顯然它不是就地排序。

注意:

若用單鏈表做存儲結構,很容易給出就地的歸并排序。

總結

以上是生活随笔為你收集整理的c语言归并排序代码详细注释,C语言实现排序算法之归并排序详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文字字幕在线中文乱码电影 | 亚洲av乱码一区二区 | 黄色片子视频 | 可以免费看的毛片 | 91成人在线免费 | 白浆在线| 欧美自偷自拍 | 亚洲国产中文字幕在线观看 | av免播放器在线观看 | 老师张开让我了一夜av | 三级网站在线看 | 国产精品视屏 | 午夜两性视频 | 日日夜夜精品视频 | 日本黄色片. | 日本一区二区三区四区视频 | 男生草女生的视频 | 国产人妖在线观看 | 一级黄色影院 | 亚洲一区在线免费观看 | 国产东北露脸精品视频 | 神马影院午夜伦理 | 色眯眯影视 | 三级91 | 就爱啪啪网 | 亚洲免费中文字幕 | 亚洲精品456 | 日本在线一区二区 | 午夜av激情| 亚洲三级中文字幕 | 日韩午夜精品 | 亚洲一区二区三区av无码 | 奇米精品一区二区三区四区 | 欧美成人精品一区二区 | 激情综合网婷婷 | 免费看国产精品 | 成人香蕉视频在线观看 | 国产69精品久久久久久久 | 国产日韩av在线 | 性欧美丰满熟妇xxxx性仙踪林 | a亚洲精品 | 成人高清视频在线观看 | 日本一级淫片免费放 | 欧美高清视频 | 欧美最猛黑人xxxx黑人猛交 | a级片免费播放 | 亚洲综合激情五月久久 | 成人性生交大片免费看vrv66 | 国产在线精品成人欧美 | 久久天堂av综合合色蜜桃网 | 亚洲天堂资源网 | 亚洲欧美日韩一区二区三区四区 | 国产精品视频一区二区三区不卡 | 久久激情综合网 | 亚洲高清自拍 | 久久亚洲一区二区三区四区五区 | 欧美一极片 | 99在线视频精品 | 污漫网站| 色妞综合网| 午夜激情视频在线观看 | 久久精品国产一区 | 国产页| 欧美午夜寂寞影院 | 澳门黄色 | 亚洲欧美一二三区 | 亚洲精品成人在线视频 | 国产综合图区 | 国产精品自拍偷拍 | 免费观看a视频 | 亚洲中文字幕无码一区 | 精品人伦一区二区三 | 亚洲乱码国产乱码精品精的特点 | 奇米色婷婷 | wwww欧美| 午夜第一页 | 簧片av| 91二区 | 91丝袜美女| 久久福利一区 | 久久综合九九 | 亚洲男人天堂2018 | 三级不卡视频 | 狠狠干狠狠撸 | 国产三级福利 | 182av| 91欧美成人 | 国产精品丝袜黑色高跟鞋的设计特点 | 色婷在线 | 国产精品高潮呻吟AV无码 | 天天影视色 | 粗大黑人巨茎大战欧美成人 | 色综合久久88色综合天天免费 | 小俊大肉大捧一进一出好爽 | 在线电影一区 | 小明看国产 | 成人免费激情视频 | 无遮挡在线观看 | 一区二区三区少妇 |