首页 > 试题广场 >

归并排序

[编程题]归并排序
  • 热度指数:2587 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
请编程实现一个整型数组的归并排序。本题会人工判断,请严格按照题目描述完成

输入描述:
一个无序的整型数组,输入格式见输入样例


输出描述:
一个有序的整型数组,输出格式见输出样例
示例1

输入

[3, 1, 4, 5, 17, 2, 12]

输出

[1, 2, 3, 4, 5, 12, 17]
public static void sort(int[] arr, int left, int right) { if (left < right) { // 中间值  int mid = (left + right) / 2;  // 左边到中值排序并合并  sort(arr, left, mid);  // 中值到右边排序并合并  sort(arr, mid + 1, right);  // 左边和右边合并, 每个递归过程结束,弹栈后左边和右边都会内部有序  // 左数组长度  int leftLen = mid - left + 1;  // 右数组长度  int rightLen = right - mid;  // 左数组  int[] leftArr = new int[leftLen];  // 右数组  int[] rightArr = new int[rightLen];  // 装载左边数组,(已排序合并完成)  for (int i = 0; i < leftLen; ++i)
            leftArr[i] = arr[left + i];  // 装载右边数组,(已排序合并完成)  for (int j = 0; j < rightLen; ++j)
            rightArr[j] = arr[mid + 1 + j];  // 进行最小值比较并合并到 arr 指定位置  int i = 0, j = 0, k = left;  while (i < leftLen && j < rightLen) { if (leftArr[i] <= rightArr[j]) {
                arr[k] = leftArr[i];  i++;  } else {
                arr[k] = rightArr[j];  j++;  }
            k++;  } // 比较合并完成,左边数组有剩余,剩余部分填充到 arr  while (i < leftLen) {
            arr[k] = leftArr[i];  i++;  k++;  } // 比较合并完成,右边数组有剩余,剩余部分填充到 arr  while (j < rightLen) {
            arr[k] = rightArr[j];  j++;  k++;  }
    }
}
发表于 2023-11-02 22:59:01 回复(0)
importjava.util.Scanner;
importjava.util.Arrays;
publicclassMain{
    publicstaticvoidmain(String[] args){
        Scanner input = newScanner(System.in);
        String str1 = input.nextLine();
        int[] number = together(str1);
        System.out.println(Arrays.toString(number));
    }
     
    publicstaticint[] together(String str1){
        String str2 = str1.substring(1,str1.length()-1);
        String[] endstrs = str2.split(", ");
        int[] number = newint[endstrs.length];
        for(inti=0;i<number.length;i++){
            number[i]=Integer.parseInt(endstrs[i]);
        }
        for(inti=0;i<number.length;i++){
            for(intk=0;k<number.length-1-i;k++){
                if(number[k]>=number[k+1]){
                    inttmp = number[k];
                    number[k] = number[k+1];
                    number[k+1] = tmp;
                }
            }
        }
        return number;
    }
}
编辑于 2021-07-20 20:15:47 回复(0)