合并排序代碼Java 合并排序代碼Java

java歸并排序

.example-btn{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.example-btn:hover{color:#fff;background-color:#47a447;border-color:#398439}.example-btn:active{background-image:none}div.example{width:98%;color:#000;background-color:#f6f4f0;background-color:#d0e69c;background-color:#dcecb5;background-color:#e5eecc;margin:0 0 5px 0;padding:5px;border:1px solid #d4d4d4;background-image:-webkit-linear-gradient(#fff,#e5eecc 100px);background-image:linear-gradient(#fff,#e5eecc 100px)}div.example_code{line-height:1.4em;width:98%;background-color:#fff;padding:5px;border:1px solid #d4d4d4;font-size:110%;font-family:Menlo,Monaco,Consolas,"Andale Mono","lucida console","Courier New",monospace;word-break:break-all;word-wrap:break-word}div.example_result{background-color:#fff;padding:4px;border:1px solid #d4d4d4;width:98%}div.code{width:98%;border:1px solid #d4d4d4;background-color:#f6f4f0;color:#444;padding:5px;margin:0}div.code div{font-size:110%}div.code div,div.code p,div.example_code p{font-family:"courier new"}pre{margin:15px auto;font:12px/20px Menlo,Monaco,Consolas,"Andale Mono","lucida console","Courier New",monospace;white-space:pre-wrap;word-break:break-all;word-wrap:break-word;border:1px solid #ddd;border-left-width:4px;padding:10px 15px} 排序算法是《數(shù)據(jù)結構與算法》中最基本的算法之一。排序算法可以分為內部排序和外部排序,內部排序是數(shù)據(jù)記錄在內存中進行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。常見的內部排序算法有:插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數(shù)排序等。以下是歸并排序算法:

創(chuàng)新互聯(lián)公司主要從事網站制作、網站建設、網頁設計、企業(yè)做網站、公司建網站等業(yè)務。立足成都服務石泉,10多年網站建設經驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:18982081108

歸并排序(Merge sort)是建立在歸并操作上的一種有效的排序算法。該算法是采用分治法(Divide and Conquer)的一個非常典型的應用。

作為一種典型的分而治之思想的算法應用,歸并排序的實現(xiàn)由兩種方法:

自上而下的遞歸(所有遞歸的方法都可以用迭代重寫,所以就有了第 2 種方法); 自下而上的迭代;

在《數(shù)據(jù)結構與算法 JavaScript 描述》中,作者給出了自下而上的迭代方法。但是對于遞歸法,作者卻認為:

However, it is not possible to do so in JavaScript, as the recursion goes too deep for the language to handle.

然而,在 JavaScript 中這種方式不太可行,因為這個算法的遞歸深度對它來講太深了。

說實話,我不太理解這句話。意思是 JavaScript 編譯器內存太小,遞歸太深容易造成內存溢出嗎?還望有大神能夠指教。

和選擇排序一樣,歸并排序的性能不受輸入數(shù)據(jù)的影響,但表現(xiàn)比選擇排序好的多,因為始終都是 O(nlogn) 的時間復雜度。代價是需要額外的內存空間。

2. 算法步驟

申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合并后的序列;

設定兩個指針,最初位置分別為兩個已經排序序列的起始位置;

比較兩個指針所指向的元素,選擇相對小的元素放入到合并空間,并移動指針到下一位置;

重復步驟 3 直到某一指針達到序列尾;

將另一序列剩下的所有元素直接復制到合并序列尾。

3. 動圖演示

代碼實現(xiàn) JavaScript 實例 function mergeSort ( arr ) { ? // 采用自上而下的遞歸方法

var len = arr. length ;

if ( len

java合并排序

代碼

可以看出樓主是一個

新手

,你的這個錯誤是

Comparable

a[]

=

{3,

6,

4,

12,

8,

5,

14

};這里,

3,6,4這些數(shù)據(jù)不是Comparable

實現(xiàn)類,為什么會不是呢?為什么會在這里出錯呢?我猜測樓主的這個代碼曾經在別的環(huán)境下可以運行的,你這里錯誤的應該是

你現(xiàn)在

的JDK是1.4的,活著你的編譯環(huán)境是1.4的,而要Comparable

a[]

=

{3,

6,

4,

12,

8,

5,

14

};能被正常編譯需要在1.5的環(huán)境下,因為1.5的

特性

使得3,6,4這些

數(shù)字

可以當作一個Integer

對象

來處理,而Integer類是實現(xiàn)了Comparable

接口

的。

下面是如果你是用eclipse的話,右鍵點擊項目--properties---JAVA

compiler修改編譯環(huán)境

java編程合并排序算法

package?p1;

import?java.util.Arrays;

public?class?Guy

{

/**

?*?歸并排序

?*/

private?static?void?mergeSort?(?int[]?array,?int?start,?int?end,?int[]?tempArray?)

{

if?(end?=?start)

{

return;

}

int?middle?=?(?start?+?end?)?/?2;

mergeSort?(array,?start,?middle,?tempArray);

mergeSort?(array,?middle?+?1,?end,?tempArray);

int?k?=?0,?leftIndex?=?0,?rightIndex?=?end?-?start;

System.arraycopy?(array,?start,?tempArray,?0,?middle?-?start?+?1);

for?(?int?i?=?0;?i??end?-?middle;?i++?)

{

tempArray[end?-?start?-?i]?=?array[middle?+?i?+?1];

}

while?(k??end?-?start?+?1)

{

if?(tempArray[rightIndex]??tempArray[leftIndex])?//?從小到大

{

array[k?+?start]?=?tempArray[leftIndex++];

}

else

{

array[k?+?start]?=?tempArray[rightIndex--];

}

k++;

}

}

public?static?void?main?(?String[]?args?)

{

int[]?array?=?new?int[]?{?11,?213,?134,?65,?77,?78,?23,?43?};

mergeSort?(array,?0,?array.length?-?1,?new?int[array.length]);

System.out.println?(Arrays.toString?(array));

}

}

新聞標題:合并排序代碼Java 合并排序代碼Java
網站鏈接:http://muchs.cn/article24/hjccce.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供自適應網站、關鍵詞優(yōu)化、商城網站定制開發(fā)、App開發(fā)網站設計

廣告

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

h5響應式網站建設