归并排序
归并排序(稳定)是另一种不同的排序方法,因为归并排序使用了递归分治的思想,所以理解起来比较容易。其基本思想是,先递归划分子问题,然后合并结果。把待排序列看成由两个有序的子序列,然后合并两个子序列,然后把子序列看成由两个有序序列。。。。。倒着来看,其实就是先两两合并,然后四四合并。。。最终形成有序序列。空间复杂度为O(n),时间复杂度为O(nlogn)。
public class MergeSort{
public void sort(int[] array)
{
if(array == null || array.length == 0)
return;
int[] temp = new int[array.length];
mergeSort(array, 0, array.length-1, temp);
}
public void mergeSort(int[] array, int left, int right, int[] temp)
{
if(left<right)
{
int mid = (right + left) / 2;
mergeSort(array, left, mid, temp);
mergeSort(array, mid+1, right, temp);
merge(array, left, mid, right, temp);
}
}
public void merge(int[] array, int left, int mid, int right, int[] temp)
{
int i, j, k;
i = k = left;
j = mid + 1;
while (i<=mid && j<=right) {
if(array[i] <= array[j])
{
temp[k] = array[i];
k++;
i++;
}
else {
temp[k] = array[j];
k++;
j++;
}
}
if(i<=mid)
{
while (i<=mid) {
temp[k] = array[i];
k++;
i++;
}
}
if(j<=right)
{
while (j<=right) {
temp[k] = array[j];
k++;
j++;
}
}
for (i = left; i<=right ; i++) {
array[i] = temp[i];
}
}
}