/**
* 採用遞迴方法實現排序,特點:複雜度o(nlgn),非原地排序(有非常數個元素存放在陣列以外的地方)
* 分解:將n個元素分成各含n/2個元素的子串行
* 解決:用合併排序法對兩個子串行遞迴地排序
* 合併:合併兩個已排序好的子串行以得到排序結果
*/public class mergesort
//把剩餘的元素放入arr中
while(iarr[k++]=tem1[i++];
while(jarr[k++]=tem2[j++];
}/**
* 合併排序演算法的外層呼叫函式,
* 把n個元素分成各含n/2個元素的子串行,然後遞迴進行分解,分解到兩個子串行只有乙個元素時呼叫merge進行合併
* @param arr 陣列
* @param p 開始位置
* @param r 結束位置
*/void mergesort(int arr,int p,int r)
}public static void main(string args) ;
mergesort ms = new mergesort();
ms.mergesort(arr,0,arr.length-1);
for(int i=0;isystem.out.println(arr[i]);
}}
演算法導論學習筆記 2 歸併排序
今天學習了演算法導論上的歸併排序演算法,並且完成了在紙上寫出偽 以前就學過歸併但是理解的不夠透徹,以前還一直困惑 為什麼明明歸併排序比快排的時間複雜度更穩定,為什麼庫函式不用歸併而用快排,現在知道原因了,因為歸併排序必須開額外的空間,而且空間開銷還比較大,下面介紹演算法 首先,歸併排序用到了分治的思...
演算法導論學習 歸併排序
前面看完了插入排序和插入排序後面習題裡面的選擇排序,最近又把歸併排序給看了。插入排序的最壞情況為n平方,當然選擇排序的恒為n平法,而歸併排序則是乙個nlogn的時間複雜度。當然這指的是在n無限大的情況下才可以成立,對於元素個數很小的,插入排序反而會快一些。歸併排序的主要思想就是利用了分治法把大的問題...
歸併排序 演算法導論學習
歸併排序利用分治的思想進行排序,採用遞迴形式進行排序 舉個栗子 給乙個五個元素的陣列,下標從0到4 把其分為兩個部分 0,1,2和3,4 兩個部分都有序了再合併 0,1,2再分為兩個部分0,1和2 兩個部分都有序了再合併 比較0,1,的大小使其有序,2是乙個數字,也有序,將這兩個有序的合為乙個有序的...