您的位置:首页 > 其它

【排序算法】归并排序

2015-08-28 09:38 176 查看
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,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: