package e.d4.merge;
public class Merge {
/**
* 合并
* @param a 原数组
* @param b 临时数组
* @param i 左边数组第一个元素
* @param j 右边数组第一个元素
* @param r 右边数组最后一个元素
*/
static void merge(int a[], int b[], int i, int j, int r) {
int lefeEnd = j - 1;//左边最后一个元素
int k = i;//临时数组b的当前元素索引
int num = r - i + 1;//左右两个数组元素的个数和
while (i <= lefeEnd && j <= r) {
if (a[i] <= a[j]) b[k++] = a[i++];
else b[k++] = a[j++];
}
//左边剩下的元素
while (i <= lefeEnd) b[k++] = a[i++];
//右边剩下的元素
while (j <= r) b[k++] = a[j++];
for (int n = 0; n < num; n++, r--) {
a[r] = b[r];
}
}
/**
* 合并排序算法主程序
* @param a 原数组
* @param b 临时数组
* @param left 数组第一个元素
* @param right 数组最后一个元素
*/
static void mergesort(int a[], int b[], int left, int right) {
if (left >= right) return;
int i = (left + right) / 2;
mergesort(a, b, left, i);//拆分左边的数组
mergesort(a, b, i + 1, right);//拆分右边的数组
merge(a, b, left, i + 1, right);//左右合并
}
public static void main(String[] args) {
//需要排序的数组
int a[] = {60, 20, 31, 5, 44, 55, 65};
//临时数组
int b[] = {0, 0, 0, 0, 0, 0, 0};
mergesort(a, b, 0, 6);
for (int i = 0; i < 7; i++) {
System.out.printf("%d ", a[i]);
}
System.out.printf("\n");
}
}
归并排序算法实现
最新推荐文章于 2024-05-20 20:08:58 发布