package sort.algorithm.merg;
public class Merg
{
// 归并算法--划分解决排序
// 归并排序的最坏情况运行时间、平均情况运行时间以及最好情况运行时间都是O(nlogn)
// 归并排序的最坏情况运行时间是O(nlogn),而快速排序的最坏情况运行时间是O(n^2).但是归并排序需要更多的存储空间,因为它
// 需要一个额外的数组
public static void mergeSort(int data[], int first, int n)
{
int n1;
int n2;
if (n > 1)
{
n1 = n / 2;
n2 = n - n1;
mergeSort(data, first, n1);
mergeSort(data, first + n1, n2);
merge(data, first, n1, n2);
}
}
private static void merge(int[] data, int first, int n1, int n2)
{
int[] temp = new int[n1 + n2];
int copied = 0;
int copied1 = 0;
int copied2 = 0;
while ((copied1 < n1) && (copied2 < n2))
{
if (data[first + copied1] < data[first + n1 +copied2])
{
temp[copied++] = data[first+copied1];
copied1++;
}
else {
temp[copied++] = data[first + n1 + copied2];
copied2++;
}
}
while (copied1 < n1)
temp[copied++] = data[first+(copied1++)];
while (copied2 < n2)
temp[copied++] = data[first+n1+(copied2++)];
for (int i = 0; i < temp.length; i++)
data[first+i] = temp[i];
}
public static void main(String[] args)
{
int data[] = {80, 30, 60, 50, 40, 70, 20, 10, 5, 0};
mergeSort(data,0,10);
for (int i = 0; i < data.length; i++)
{
System.out.print(data[i] + ",");
}
}
}
运行结果:
0,5,10,20,30,40,50,60,70,80,