问题描述
给定一个整型数组nums,nums中偶数位上的数为增,奇数位上的数为减。请将数组按照升序排序。
例:
输入: nums = {1,8,3,6,5,4,7,2,9}
输出:nums = {1,2,3,4,5,6,7,8,9}
public class MergeSort {
public static void mergeSort(int[] nums) {
int length = nums.length;
int n1 = 0;//升序序列的长度
int n2 = length/2;//降序序列的长度
int i = 0;//升序序列的下标
int j = 0;
if(length%2 != 0){
n1 = length/2+1;
j = length -2;
}else {
n1 = length/2;
j = length-1;
}
int[] nums1 = new int[n1];
for(int k=0;k<n1;k++){
nums1[k] = nums[i];
i = i+2;
}
int[] nums2 = new int[n2];
for(int k=0;k<n2;k++){
nums2[k] = nums[j];
j = j-2;
}
int m = 0;
i=0;
j=0;
while(m<length && i<n1 && j<n2) {
while(m<length && i<n1 && j<n2 && nums1[i] <= nums2[j]) {
nums[m] = nums1[i];
i++;
m++;
}
while(m<length && i<n1 && j<n2 && nums1[i] > nums2[j]) {
nums[m] = nums2[j];
m++;
j++;
}
}
while(m<length && i<n1) {
nums[m] = nums1[i];
i++;
m++;
}
while(m<length && j<n2) {
nums[m] = nums2[j];
m++;
j++;
}
}
public static void main(String[] args) {
int[] nums = {1,39,5,21,7,18,12,9,18,2,32};
mergeSort(nums);
for(int i=0;i<nums.length;i++){
System.out.print(nums[i]+" ");
}
}
}