归并排序的java代码
时间: 2023-11-13 10:58:17 浏览: 49
归并排序是一种基于分治思想的排序算法,它的基本思路是将待排序的序列分成若干个子序列,每个子序列都是有序的,然后再将有序的子序列合并成一个有序的序列。下面是归并排序的Java代码实现:
```
public class MergeSort {
public static void mergeSort(int[] arr, int left, int right) {
if (left < right) {
int mid = (left + right) / 2;
mergeSort(arr, left, mid);
mergeSort(arr, mid + 1, right);
merge(arr, left, mid, right);
}
}
public static void merge(int[] arr, int left, int mid, int right) {
int[] temp = new int[right - left + 1];
int i = left, j = mid + 1, k = 0;
while (i <= mid && j <= right) {
if (arr[i] <= arr[j]) {
temp[k++] = arr[i++];
} else {
temp[k++] = arr[j++];
}
}
while (i <= mid) {
temp[k++] = arr[i++];
}
while (j <= right) {
temp[k++] = arr[j++];
}
for (int p = 0; p < temp.length; p++) {
arr[left + p] = temp[p];
}
}
}
```
在这段代码中,mergeSort方法是归并排序的主方法,它接收一个待排序的数组arr和数组的左右边界left和right。在方法中,首先判断left是否小于right,如果是,则计算出数组的中间位置mid,然后递归调用mergeSort方法对左右两个子序列进行排序,最后调用merge方法将左右两个有序子序列合并成一个有序序列。
merge方法是归并排序的核心方法,它接收一个待排序的数组arr和数组的左右边界left、mid和right。在方法中,首先创建一个临时数组temp,然后使用两个指针i和j分别指向左右两个子序列的起始位置,使用一个指针k指向临时数组的起始位置。接着,比较左右两个子序列的当前元素大小,将较小的元素放入临时数组中,并将对应指针向后移动一位。最后,将剩余的元素依次放入临时数组中,再将临时数组中的元素复制回原数组中。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)