如何實現歸併排序
歸併排序的時間複雜度是:nlogn,如何實現歸併排序呢?下面是小編給大家提供的算法,大家可以參考閲讀,更多詳情請關注應屆畢業生考試網。
歸併排序的.時間複雜度是:nlogn,主要是用到二路歸併排序,也就是把兩個有序集合合併為一個有序集合.
遞歸二路歸併排序的算法:
代碼片段(1)
view sourceprint;
package algorithm;
public class MergeSort {
// private static long sum = 0;
/**
* <pre>
* 二路歸併
* 原理:將兩個有序表合併和一個有序表
* </pre>
*
* @param a
* @param s
* 第一個有序表的起始下標
* @param m
* 第二個有序表的起始下標
* @param t
* 第二個有序表的結束小標
*
*/
private static void merge(int[] a, int s, int m, int t) {
int[] tmp = new int[t - s + 1];
int i = s, j = m, k = 0;
while (i < m && j <= t) {
if (a[i] <= a[j]) {
tmp[k] = a[i];
k++;
i++;
} else {
tmp[k] = a[j];
// sum += (j - i) - (j - m);
j++;
k++;
}
}
while (i < m) {
tmp[k] = a[i];
i++;
k++;
}
while (j <= t) {
tmp[k] = a[j];
j++;
k++;
}
ycopy(tmp, 0, a, s, th);
}
/**
*
* @param a
* @param s
* @param len
* 每次歸併的有序集合的長度
*/
public static void mergeSort(int[] a, int s, int len) {
int size = th;
int mid = size / (len << 1);
int c = size & ((len<<1) - 1);
// -------歸併到只剩一個有序集合的時候結束算法-------//
if (mid == 0)
return;
// ------進行一趟歸併排序-------//
for (int i = 0; i < mid; ++i) {
s = i * 2 * len;
merge(a, s, s + len, (len << 1) + s - 1);
}
// -------將剩下的數和倒數一個有序集合歸併-------//
if (c != 0)
merge(a, size - c - 2 * len, size - c, size - 1);
//
// for (int i = 0; i < th; ++i) {
// t(a[i] + " ");
// }
// tln();
// -------遞歸執行下一趟歸併排序------//
mergeSort(a, 0, 2 * len);
}
public static void main(String[] args) {
// merge(new int[] { 4, 3, 6, 1, 2, 5 }, 0, 3, 5);
int[] a = new int[] { 4, 3, 6, 1, 2, 5};
mergeSort(a, 0, 1);
for (int i = 0; i < th; ++i) {
t(a[i] + " ");
}
// tln("/n" + sum);
}
}
-
PHP編程中10個最常見的錯誤
在生活中,好多人疑惑PHP語言難不難呢?那麼,小編來解答PHP編程中10個最常見的錯誤,歡迎來閲讀!錯誤1:foreach循環後留下懸掛指針在foreach循環中,如果我們需要更改迭代的元素或是為了提高效率,運用引用是一個好辦法:$arr=array(1,2,3,4);foreach($arras&$value){$val...
-
作為程序員必知的16個最佳PHP庫
PHP是一種功能強大的web站點腳本語言,通過PHP,web網站開發者可以更容易地創建動態的引人入勝的web頁面。開發人員可以使用PHP代碼與一些網站模板和框架來提升功能和特性。然而,編寫PHP代碼是一個繁瑣又耗時的過程。為了縮短開發時間,開發人員可以用PHP庫替代編寫代...
-
解決PHPutf-8編碼問題的方法
PHPutf-8編碼問題,着是困惑很多人的問題,如果處理不好,都是亂碼,下面是解決PHPutf-8編碼問題的方法,一起來學習下吧:1.在建數據庫的時候,尤其是用phpMyAdmin與MYSQL打交道時候,一般都是utf-8,字段為utf8_general_ci數據庫的設置:在文件中查找:[mysql]default-character-s...
-
提高PHP執行效率的50個技巧
PHP是一種HTML內嵌式的語言,是一種在服務器端執行的嵌入HTML文檔的腳本語言,下面是小編為大家整理的提高PHP執行效率的50個技巧,歡迎參考~1、用單引號代替雙引號來包含字符串,這樣做會更快一些。因為PHP會在雙引號包圍的字符串中搜尋變量,單引號則不會,注意:只有echo...