歸併排序是創建在歸併操做上的一種有效的排序算法,該算法是採用分治法的一個典型的應用。它的基本操做是:將已有的子序列合併,達到徹底有序的序列;即先使每一個子序列有序,再使子序列段間有序。java
package cn.caojiantao.tutorials.sort;
/** * @author caojiantao */
public class Merge implements ISort {
@Override
public void sort(int[] data) {
sort(data, 0, data.length - 1);
}
private void sort(int[] data, int start, int end) {
if (start < end) {
int m = (start + end) / 2, i = start, j = m + 1, cursor = 0;
// 分
sort(data, start, m);
sort(data, m + 1, end);
// 而治之
int[] tmp = new int[end - start + 1];
while (i <= m && j <= end) tmp[cursor++] = (data[i] <= data[j]) ? data[i++] : data[j++];
while (i <= m) tmp[cursor++] = data[i++];
while (j <= end) tmp[cursor++] = data[j++];
System.arraycopy(tmp, 0, data, start, tmp.length);
}
}
}
複製代碼
穩定算法