public class MergeSort
{
public static void main(String[] args)
{
int[] arr = { 3, 5, 2, 1, 5, 6, 6, 2, 4, 7, 22, 35, 77, 11, 66, 2, 44, 55, 33, 44, 663, 64363, 235, 234, 66, 25, 67, 235, 6, 25 };
mergeSort(arr, 0, (arr.length - 1) / 2, arr.length - 1);
for (int a:arr)
System.out.print(a + ",");
}
/**
* 并归排序
*/
public static void mergeSort(int[] arr, int start, int mid, int end)
{
if (start >= end)
return;
//先对左边进行并归排序
mergeSort(arr, start, (start + mid) / 2, mid);
//再对右边进行并归排序
mergeSort(arr, mid + 1, (mid + 1 + end) / 2, end);
//将两部分合并
int i = start;
int j = mid + 1;
//先申请一样大的数组
int[] temp = new int[end - start + 1];
int ptr = 0;
//将两部分按照从小到大顺序放入到申请的数组里
while (i <= mid && j <= end)
{
if (arr[i] < arr[j])
{
temp[ptr] = arr[i];
i++;
ptr++;
}
else
{
temp[ptr] = arr[j];
j++;
ptr++;
}
}
while (i <= mid)
{
temp[ptr] = arr[i];
i++;
ptr++;
}
while (j <= end)
{
temp[ptr] = arr[j];
j++;
ptr++;
}
//将申请的数组赋值到原来数组里
for (i = start, ptr = 0; ptr < temp.length; ptr++, i++)
{
arr[i] = temp[ptr];
}
}
并归排序
最新推荐文章于 2023-09-03 20:36:33 发布