Merge sort là một thuật toán sắp xếp đệ quy được sử dụng để sắp xếp một mảng bằng cách chia nó thành các mảng con, sắp xếp từng mảng con, và sau đó trộn các mảng con lại với nhau để tạo thành một mảng đã sắp xếp. Thuật toán merge sort có thể được triển khai trong Java bằng cách sử dụng đệ quy để chia mảng thành các mảng con, sau đó sử dụng thuật toán trộn để kết hợp các mảng con đã sắp xếp.
Ví dụ về thuật toán sắp xếp merge sort trong Java:
public class MergeSortExample {
public static void main(String[] args) {
int[] arr = { 3, 1, 4, 2, 7, 5, 8, 6 };
System.out.println("Mảng trước khi sắp xếp: " + Arrays.toString(arr));
mergeSort(arr, 0, arr.length - 1);
System.out.println("Mảng sau khi sắp xếp: " + Arrays.toString(arr));
}
public static void mergeSort(int[] arr, int left, int right) {
if (left < right) {
int middle = (left + right) / 2;
mergeSort(arr, left, middle);
mergeSort(arr, middle + 1, right);
merge(arr, left, middle, right);
}
}
public static void merge(int[] arr, int left, int middle, int right) {
int n1 = middle - left + 1;
int n2 = right - middle;
int[] L = new int[n1];
int[] R = new int[n2];
for (int i = 0; i < n1; ++i)
L[i] = arr[left + i];
for (int j = 0; j < n2; ++j)
R[j] = arr[middle + 1 + j];
int i = 0, j = 0;
int k = left;
while (i < n1 && j < n2) {
if (L[i] <= R[j]) {
arr[k] = L[i];
i++;
} else {
arr[k] = R[j];
j++;
}
k++;
}
while (i < n1) {
arr[k] = L[i];
i++;
k++;
}
while (j < n2) {
arr[k] = R[j];
j++;
k++;
}
}
}
Trong ví dụ này, thuật toán merge sort được triển khai bằng cách sử dụng hàm đệ quy mergeSort
để chia mảng thành các mảng con, sau đó sử dụng hàm merge
để trộn các mảng con đã sắp xếp với nhau.