以下是Merge Sort的Java实现,采用了递归,当然用循环的话效率会更高点。 Merge Sort的时间复杂度为0(nlgn) package sort; public class MergeSort { public int[] data; public MergeSort(int[] data) { this.data = data; } /** * Merge Sort 的递归实现 */ public void sort(int start, int end) { if (start >= end) return; int mid = (start + end)/2; sort(start, mid); sort(mid+1, end); merge(start, mid, end); } public void merge(int start, int mid, int end) { int[] tmp = new int[end-start+1]; // 临时array,用来存放排好序的数据 // i是左边那个array的指针,j是右边那个array的,k是tmp的指针 int i = start, j = mid+1, k=0; for ( ; i<=mid && j<=end; k++) { if (data[i] < data[j]) { // 左边那个array的数字比较小,加入到tmp中去 tmp[k] = data[i]; i++; } else { // 反之把右边array中的数加入到tmp中去 tmp[k] = data[j]; j++; } } while (i<=mid) { // 若左边的array还有剩下的数 tmp[k] = data[i]; k++; i++; } while (j<=end) { // 若右边的array还有剩下的数 tmp[k] = data[j]; k++; j++; } for (i=0; i<tmp.length; i++) { // 把tmp中的内容copy到原来的数组中,从start到end data[i+start] = tmp[i]; } } /* * 打印整个array */ public void printArray(){ for (int i=0; i<data.length; i++) System.out.print(data[i]+", "); System.out.println(); } public static void main(String args[]) { int[] data = {5,7,2,1,5,22,8,0,9}; MergeSort test = new MergeSort(data); //test.printArray(); test.sort(0, data.length-1); test.printArray(); } }