java 合并排序算法_Java 程序实现合并排序算法

Java 程序实现合并排序算法

在此示例中,我们将学习在Java中执行合并排序算法。

在学习Java中的合并排序算法之前,请确保您了解合并排序算法的工作原理。

示例:实现合并排序算法的Java程序

示例import java.util.Arrays;

//Java中的合并排序

class Main {

//将两个子数组L和M合并为数组

void merge(int array[], int p, int q, int r) {

int n1 = q - p + 1;

int n2 = r - q;

int L[] = new int[n1];

int M[] = new int[n2];

//填充左右数组

for (int i = 0; i 

L[i] = array[p + i];

}

for (int j = 0; j 

M[j] = array[q + 1 + j];

}

//维护子数组和主数组的当前索引

int i, j, k;

i = 0;

j = 0;

k = p;

//直到我们到达L或M的任一端,再选择更大的一个

//元素L和M,并将它们放置在A[p..r]处的正确位置。

//降序排序

//使用 if(L[i] >= 

while (i 

if (L[i] <= M[j]) {

array[k] = L[i];

i++;

} else {

array[k] = M[j];

j++;

}

k++;

}

// 当L或M中的元素用完时,

// 将其余元素并放入A[p..r]

while (i 

array[k] = L[i];

i++;

k++;

}

while (j 

array[k] = M[j];

j++;

k++;

}

}

// 将数组划分为两个子数组,对它们进行排序并合并

void mergeSort(int array[], int left, int right) {

if (left 

//m是数组被分成两个子数组的点

int mid = (left + right) / 2;

//对每个子数组的递归调用

mergeSort(array, left, mid);

mergeSort(array, mid + 1, right);

//合并已排序的子数组

merge(array, left, mid, right);

}

}

public static void main(String args[]) {

//创建一个未排序的数组

int[] array = { 6, 5, 12, 10, 9, 1 };

Main ob = new Main();

//调用方法mergeSort()

//传递参数:数组、第一个索引和最后一个索引

ob.mergeSort(array, 0, array.length - 1);

System.out.println("排序后的数组:");

System.out.println(Arrays.toString(array));

}

}

输出1未排序的数组:

[6, 5, 12, 10, 9, 1]

排序后的数组:

[1, 5, 6, 9, 10, 12]

在此,数组的元素以升序排序。如果要按降序对元素进行排序,则可以在merge()方法的第一个while循环内将代码更改为:小于号改为大于

if (L[i] >= M[j]) {

你可能感兴趣的:(java,合并排序算法)