完整代码
package lvyy_test;
import java.util.Arrays;
public class Guibing {
public static void main(String[] args) {
int[] nums = new int[] { 2, 5, 3, 6, 4, 1, 7, 9, 8, 10 };
int[] result = sortNums(nums);
for (int i = 0; i < result.length; i++) {
System.out.print(result[i] + " ");
}
}
private static int[] sortNums(int[] nums) {
// 长度为1,不需要排序
if (nums.length <= 1) {
return nums;
}
// 长度大于1时,需要排序
int middle = nums.length / 2;
// 左半部分排序
int[] left = sortNums(Arrays.copyOfRange(nums, 0, middle));
// 右半部分排序
int[] right = sortNums(Arrays.copyOfRange(nums, middle, nums.length));
// 左右部分结合在排序
int i = 0;
int j = 0;
int[] result = new int[nums.length];
while (i < left.length && j < right.length) {
if (left[i] > right[j]) {
result[i + j] = right[j++];
} else {
result[i + j] = left[i++];
}
}
while (i < left.length) {
result[i + j] = left[i++];
}
while (j < right.length) {
result[i + j] = right[j++];
}
// 返回左右排序完毕结果
return result;
}
}
代码思路
- 使用递归思想
- 对一个无序的数组,首先分成左右两部分,让这两部分先排好序,如左右部分可以再分,就再分,让更小的模块排好序,当最小的左右模块排好序后,就可以让最小的左右模块结合排序,接着是第二小的左右模块结合排序,知道最大的左右模块完成结合排序,程序结束。
版权声明:本文为qq_40765784原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。