归并排序:
挺好玩的,就是分而治之。分到不能再分了,就慢慢每小块每小块开始排序(排序的过程中,如果左边小块排完了,那么右边的小块直接接入进去就可以输出排序好的合并块了)。然后经过递归返回最大的排序好的数组。
package facehandjava.sort; public class MergerSort { public static void main(String[] args) { int[] arrays = {10, 5, 36, 78,56,2, 5, 8, 9, 9}; int min = 0; int max = arrays.length-1; System.out.print("原来的:"); for(int i =0;i<=max;i++) { System.out.print(arrays[i]+","); } System.out.println(); Sort(arrays,min,max); System.out.print("排序后:"); for(int i =0;i<=max;i++) { System.out.print(arrays[i]+","); } } public static void Sort(int[] arrays, int min, int max) { int mid = (min + max) / 2; if (min < max) { Sort(arrays, min, mid); Sort(arrays, mid + 1, max); MergerSort(arrays, mid, min, max); } } public static void MergerSort(int[] arrays, int mid, int min, int max) { int L = max - min + 1; int[] temp = new int[L]; int i = min; int j = mid + 1; int k = 0; while (i <= mid && j <= max) { if (arrays[i] <= arrays[j]) { temp[k] = arrays[i]; k++; i++; } else if (arrays[i] > arrays[j]) { temp[k] = arrays[j]; k++; j++; } } while (i <= mid) { temp[k] = arrays[i]; k++; i++; } while (j <= max) { temp[k] = arrays[j]; k++; j++; } for(int ii = 0;ii<L;ii++) { arrays[min + ii] = temp[ii]; } } }