归并排序
来源:互联网 发布:数据库三大范式详解 编辑:程序博客网 时间:2024/05/17 04:42
归并排序重点在于合并俩个有序子数组,思想来自于怎么合并俩个有序数组,这里只不过这俩个数组是同一个数组的前后
两部分而已.
比如 0 1 3 2 4 所以mid=2 俩部分就是0 1 3和 2 4 ,依次比较放入新数组(0 2)取0,然后(1 2)取1,然后(3,2)取2,然后(3,4)取3,这样第一部分取完了,剩下的4直接赋值就行了
private static void merge(int a[], int start, int mid, int end) {
int i = start, j = mid + 1;
int k = 0;
int temp[] = new int[a.length];
while (i <= mid && j <= end) {
if (a[i] <= a[j])
temp[k++] = a[i++];
else
temp[k++] = a[j++];
}
//俩部分长度不一样的话肯定会有一个有剩下的数,就直接赋值
while (i <= mid)
temp[k++] = a[i++];
while (j <= end)
temp[k++] = a[j++];
for (int m = 0; m < k; m++)
a[start + m] = temp[m];//合并好的重新放回去
}
然后就是怎么将一个数组的前后俩部分变成有序的,理由是当数组只有一个数的时候肯定是有序的,这时候只要递归到俩部分都只剩一个数的时候,便可以认为是有序数组的合并了.
public static void mergeSort(int a[], int start, int end) {
int mid = (start + end) / 2;//以中间的数分割为俩部分
if (start < end) {
mergeSort(a, start, mid);
mergeSort(a, mid + 1, end);
merge(a, start, mid, end);
}
}
0 0
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 第67篇Chrome扩展USB开发(三)及php及JS
- POJ3126 Prime Path
- windows上Mysql 5.5.28中文乱码完美解决方案
- 自定义顶端顶部导航栏(可配合ViewPager使用)
- c!# 按!!!键时发!!出提!!!!示!音及把!文!字!!转!换!!成声!!音
- 归并排序
- 面向对象
- 69. Sqrt(x)
- NSTimer的用法
- 课堂整理(三)
- JAVA/C++ 堆栈详解
- [矩阵快速幂]hdu1575 Tr A
- oozie server系统时钟偏差导致sqoop报错
- PAT 最大子列和问题