用Java實現歸併排序

熟悉數據結構的同學都知道,歸併排序是非常重要也是非常實用的一種排序方式,算法很穩定 ,時間複雜度保持在nLogn(底是2)。

下面本人實用Java來實現這個算法,

public class MergeSort {

        //每一次的歸併操作
private void merge(int[] a, int[] b, int l, int m, int h) {
int i, j, k;
for (k = l, j = m + 1; l <= m && j <= h; k++) {
if (a[l] < a[j]) {
b[k] = a[l];
l++;
} else {
b[k] = a[j];
j++;
}
}


if (l <= m) {
for (i = 0; i <= m - l; i++) {
b[k + i] = a[l + i];
}
}
if (j <= h) {
for (i = 0; i <= h - j; i++) {
b[k + i] = a[j + i];
}
}
}

        //確定歸併怎麼執行
private void mergeSort(int[] a, int[] b, int s, int i, int n) {
while (i < n - s) {
if (i + 2 * s - 1 < n) {
merge(a, b, i, i + s - 1, i + 2 * s - 1);
} else {
merge(a, b, i, i + s - 1, n - 1);
}
i = i + 2 * s;
}
if (i < n) {
for (int j = 0; j < n - i; j++) {
b[i + j] = a[i + j];
}
}
for (int x = 0; x <= 9; x++) {
Log.e("a[]", String.valueOf(b[x]));
}
Log.e("james", "*******");
}


public void startSort(int[] a, int[] b, int s, int i, int n) {
while (s < n) {
mergeSort(a, b, s, i, n);
s = s * 2;
mergeSort(b, a, s, i, n);
s = s * 2;
}
}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章