利用Java編寫一個(gè)歸并排序算法-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!

成都創(chuàng)新互聯(lián)成立于2013年,先為圖們等服務(wù)建站,圖們等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為圖們企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

利用Java編寫一個(gè)歸并排序算法?很多新手對此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

一、歸并排序

歸并排序是建立在歸并操作上的一種有效的排序算法,該算法是采用分治法(Divide and Conquer)的一個(gè)非常典型的應(yīng)用。將已有序的子序列合并,得到完全有序的序列;即先使每個(gè)子序列有序,再使子序列段間有序。若將兩個(gè)有序表合并成一個(gè)有序表,稱為二路歸并。

歸并過程為:比較a[i]和a[j]的大小,若a[i]≤a[j],則將第一個(gè)有序表中的元素a[i]復(fù)制到r[k]中,并令i和k分別加上1;否則將第二個(gè)有序表中的元素a[j]復(fù)制到r[k]中,并令j和k分別加上1,如此循環(huán)下去,直到其中一個(gè)有序表取完,然后再將另一個(gè)有序表中剩余的元素復(fù)制到r中從下標(biāo)k到下標(biāo)t的單元。歸并排序的算法我們通常用遞歸實(shí)現(xiàn),先把待排序區(qū)間[s,t]以中點(diǎn)二分,接著把左邊子區(qū)間排序,再把右邊子區(qū)間排序,最后把左區(qū)間和右區(qū)間用一次歸并操作合并成有序的區(qū)間[s,t]。

二、歸并操作

利用Java編寫一個(gè)歸并排序算法

三、兩路歸并算法

1、算法基本思路

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

(1)合并過程

     合并過程中,設(shè)置i,j和p三個(gè)指針,其初值分別指向這三個(gè)記錄區(qū)的起始位置。合并時(shí)依次比較R[i]和R[j]的關(guān)鍵字,取關(guān)鍵字較小的記錄復(fù)制到R1[p]中,然后將被復(fù)制記錄的指針i或j加1,以及指向復(fù)制位置的指針p加1。
     重復(fù)這一過程直至兩個(gè)輸入的子文件有一個(gè)已全部復(fù)制完畢(不妨稱其為空),此時(shí)將另一非空的子文件中剩余記錄依次復(fù)制到R1中即可。

(2)動(dòng)態(tài)申請R1

     實(shí)現(xiàn)時(shí),R1是動(dòng)態(tài)申請的,因?yàn)樯暾埖目臻g可能很大,故須加入申請空間是否成功的處理。

2、歸并算法

void Merge(SeqList R,int low,int m,int high) 
 {//將兩個(gè)有序的子文件R[low..m)和R[m+1..high]歸并成一個(gè)有序的 
 //子文件R[low..high] 
 int i=low,j=m+1,p=0; //置初始值 
 RecType *R1; //R1是局部向量,若p定義為此類型指針?biāo)俣雀?
 R1=(ReeType *)malloc((high-low+1)*sizeof(RecType)); 
 if(! R1) //申請空間失敗 
 Error("Insufficient memory available!"); 
 while(i<=m&&j<=high) //兩子文件非空時(shí)取其小者輸出到R1[p]上 
 R1[p++]=(R[i].key<=R[j].key)&#63;R[i++]:R[j++]; 
 while(i<=m) //若第1個(gè)子文件非空,則復(fù)制剩余記錄到R1中 
 R1[p++]=R[i++]; 
 while(j<=high) //若第2個(gè)子文件非空,則復(fù)制剩余記錄到R1中 
 R1[p++]=R[j++]; 
 for(p=0,i=low;i<=high;p++,i++) 
 R[i]=R1[p];//歸并完成后將結(jié)果復(fù)制回R[low..high] 
 } //Merge 

網(wǎng)頁題目:利用Java編寫一個(gè)歸并排序算法-創(chuàng)新互聯(lián)
URL標(biāo)題:http://bm7419.com/article20/cdghjo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、微信公眾號(hào)、微信小程序、服務(wù)器托管、網(wǎng)站營銷、網(wǎng)站設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司