package PracticeSort;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class mergeSort {
public static void main(String[] args) {
mergeSort yll = new mergeSort();
int[] nums = {10,1,5,2,6,3,8,4,7,9};
yll.Sort(nums,0,nums.length-1);
System.out.println(Arrays.toString(nums));
// Random random = new Random();
// System.out.println("请输入你要排序数的个数:");
// Scanner scanner = new Scanner(System.in);
// int n = scanner.nextInt();
// int[] nums = new int[n];
// for (int i = 0; i < n; i++) {
//
// nums[i] = random.nextInt(100);
// }
// yll.Sort(nums,0,nums.length-1);
// System.out.println(Arrays.toString(nums));
}
public void merge(int[] nums, int left, int mid, int right) {
int n1 = mid - left + 1;
int n2 = right - mid;
int[] M = new int[n1];
int[] N = new int[n2];
for (int i = 0; i < n1; i++) {
M[i] = nums[left + i];
}
for (int i = 0; i < n2; i++) {
N[i] = nums[i + mid + 1];
}
int i = 0, j = 0;
int k = left;
while (i < n1 && j < n2){
if (M[i] < N[j]){
nums[k] = M[i++];
}else {
nums[k] = N[j++];
}
k++;
}
while (i < n1) nums[k++] = M[i++];
while (j < n2) nums[k++] = N[j++];
}
public void Sort(int[] nums, int left, int right) {
if (left < right) {
int mid = (left + right) >> 1;
Sort(nums, left, mid);
Sort(nums, mid+1 , right);
merge(nums, left, mid, right);
}
}
}
归并排序一直不是很理解递归谁能帮帮我
最新推荐文章于 2024-10-08 13:19:19 发布