1468669076
这次带来的是归并排序算法,怪我以前无知,只会了快排,冒泡,选择,插入等,也是没听数据结构课的后果,看了下书查了资料对归并排序有了深入了理解,归并归并,先递归后合并,先来张图看看你就理解了,如图
看完是不是感觉归并排序很简单拉哈,思路大概是这样:每次对半分组分组,分到每个1组然后进行比较大小合并数组
Java代码实现如下:
/**
归并排序
@author Ape
/
public class Gsort {static int[] array = new int[] { 1, 80, 116, 165, 20, 51 };
// 将有二个有序数列合并
static void mArray(int[] a, int[] t, int start, int mid, int end) {// s1-e1为第一段,s2-e2为第二段 int s1 = start, e1 = mid , s2 = mid + 1, e2 = end; int n = 0; // 从每组的第一个数开始判断 while (s1 <= e1 && s2 <= e2) { if (a[s1] <= a[s2]) // 若第一个组的数小 t[n++] = a[s1++]; else t[n++] = a[s2++]; } // 把剩下的数拼上去 while (s1 <= e1) t[n++] = a[s1++]; while (s2 <= e2) t[n++] = a[s2++]; for (int i = 0; i < n; i++) a[start + i] = t[i];
}
static void sort(int a[], int[] t, int start, int end) {
if (start < end) { // 每次对半分 int mid = (start + end) / 2; sort(a, t, start, mid); sort(a, t, mid + 1, end); mArray(a, t, start, mid, end); }
}
public static void main(String[] args) {
// TODO Auto-generated method stub int length = array.length; int[] t = new int[length]; sort(array, t, 0, length - 1); for (int i = 0; i < length - 1; i++) System.out.print(array[i] + " - ");
}
}