一小步教父 2020-04-05 11:35 采纳率: 0%
浏览 133

新手求教,关于Java合并排序和快速排序的程序问题。请看详细描述

这是合并排序,运行之后输入类似2 3 4 1 6 5这样的数组,结果只对2 3进行排序求教。。。。。。

package mergeArray;

import java.util.Scanner;

public class MergeArray {

    private static Scanner in;
    private static Scanner in1;

    public static void main(String[] args) {
        // TODO 
        System.out.println("请输入待排序数据,以空格隔开");
       in = new Scanner(System.in);
       int l=in.nextInt();
       int[] a=new int[l];
       System.out.println("待排序数据");
       in1 = new Scanner(System.in);
       int i;
       for(i=0;i<l;i++) {
        a[i]=in1.nextInt();   
       }
       mergeSort(a,0,l-1);
       printCp(a,0,l-1);
    }

    public static void printCp(int a[],int A,int B) {
        int i;
        for(i=A;i<=B;i++) {
            System.out.print(a[i]+" ");
        }
    }

    public static void merge(int a[],int b[],int left,int i,int right) {
        System.out.print("合并");
        printCp(a,left,i);
        System.out.print("和 ");
        printCp(a,i+1,right);
        System.out.print("\r\n");
        int x=left;
        int y=i+1;
        int z=0;
        while(x<=i&&y<=right) {
            if(a[x]<a[y]) {b[z++]=a[x++];}
            else { b[z++]=a[y++];}
        }
        while(x<=i) {
            b[z++]=a[x++];
        }
        while(y<=right) {
            b[z++]=a[y++];
        }
    }

    public static void copy(int a[],int b[],int left,int right) {
        int i=0;
        int x=left;
        while(x<=right) {
            a[x++]=b[i++];
        }
    }


    public static void mergeSort(int a[],int left,int right) {
        if(left<right) {
            int i=(left+right)/2;
            mergeSort(a,left,i);
            mergeSort(a,i+1,right);
            int[] b=new int[a.length];
            merge(a,b,left,i,right);
            copy(a,b,left,right);
        }

    }


}

下面的是快速排序,应该是类似的问题,输入数组后,只对前面的两个数进行排序

package quicksort;

import java.util.Scanner;

public class QuickSort {

    private static Scanner in;
    private static Scanner in1;

    public static void printCp(int a[],int A,int B) { 
        int i;
        for(i=A;i<=B;i++) {
            System.out.print(a[i]+" ");
        }
        System.out.print("\r\n");
    }

    public static int partition(int a[],int left,int right) {
        int p=(int)(left+Math.random()*right); 
        System.out.println("排序范围:");
        printCp(a,left,right);
        System.out.println("基准元素:"+a[p]);
        int b[]=new int[right-left+1];
        int b_left=0,b_right=b.length-1;
        int j=0;
        for(int i=0;i<=right-left;i++) {
            if(a[left+i]==a[p]&&j!=1) { 
                j=1;
                continue;
            }
            if(a[left+i]<=a[p]) {
                b[b_left]=a[left+i];
                b_left++;
            }
            else {
                b[b_right]=a[left+i];
                b_right--;
            }
        }
        b[b_left]=a[p];
        int i=0;
        int x=left;
        while(x<=right) { 
            a[x++]=b[i++];
        }
        System.out.println("排序后:");
        printCp(a,left,right);
        System.out.print("\r\n");
        return left+b_left; 
    }

    public static void qSort(int a[],int left,int right) {
        if(left<right) {
            int q=partition(a,left,right);
            qSort(a,left,q-1);
            qSort(a,q+1,right);
        }
    }

    public static void main(String[] args) {
        // TODO 
       System.out.println("请输入待排序数据,以空格隔开:");
       in = new Scanner(System.in);
       int l=in.nextInt();
       int[] a=new int[l];
       System.out.println("待排序数据:");
       in1 = new Scanner(System.in);
       int i;
       for(i=0;i<l;i++) {
         a[i]=in1.nextInt();   
       }
       qSort(a,0,l-1);
       System.out.println("完成排序后数据:");
       printCp(a,0,l-1);
    }
}

  • 写回答

1条回答 默认 最新

  • baidu_38638773 2023-07-11 17:50
    关注

    a[i]=in1.nextInt(); 这个直接把值给盖住了,后面的数组没有合并进去啊

     int i=a.length;
            System.out.println(a.length);
           for(;i<l;i++) {
            a[i]=in1.nextInt();   
           }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办