sinat_25234961 2016-05-05 02:44 采纳率: 100%
浏览 1903

java算法中 数组内容交换

选择排序中:到了交换的方法exch()时,明明debug的时候看到数组被交换,回到主程序,发现又回到没有交换前
测试数组:2112 输出1212     中间过程会有2112-1212-1122-1212
自己搜了一下,看到讲解都是数组传到方法中传递的是数组首地址,觉得没什么问题,而且我编写其他排序如插入排序,用这个exch()也是没有问题,自己现在找不出原因,求大神指教。

我已经自己找到答案了,是因为选择排序的min=i,应该放在第二个循环里,每一次比较都是和a【i】比较

import java.util.Scanner;

public class Selection {

    public static void sort(Comparable[] a){
        int N=a.length;
        for(int i=0;i<N;i++)
        {
            int min=i;
            for(int j=i+1;j<N;j++)
            {
                if(less(a[j],a[min])) 
                    min=j;
                exch(a,i,min);
            }

        }
    }

    private static boolean less(Comparable v,Comparable w){
        return v.compareTo(w)<0;
    }
    private static void exch(Comparable[] a,int i,int j){
        Comparable t=a[i]; a[i]=a[j];a[j]=t;
    }
    private static void show(Comparable[] a){
        //在单行中打印数组
        for(int i=0; i<a.length;i++)
            System.out.print(a[i]+"");
        System.out.println();

    }

    public static boolean isSorted(Comparable[] a){
        //测试数组是否有序
        for(int i=1;i<a.length;i++)
            if(less(a[i],a[i-1])) return false;
        return true;
    }
    public static void main(String[] args){
        //从标准输入读取字符串,将它们排序并输出
         System.out.print("输入");
         Scanner s = new Scanner(System.in);
         String line=s.nextLine();
         System.out.println("输入的是"+line);                

        char [] charArr =line.toCharArray();    
        String[] strArr = new String[charArr.length];

        for(int i = 0; i < strArr.length; i++) {
            strArr[i] = String.valueOf(charArr[i]);
        }

        sort(strArr);
        assert isSorted(strArr);
        show(strArr);
    }

}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥30 Matlab打开默认名称带有/的光谱数据
    • ¥50 easyExcel模板 动态单元格合并列
    • ¥15 res.rows如何取值使用
    • ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发
    • ¥15 CSP算法实现EEG特征提取,哪一步错了?
    • ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
    • ¥15 vue3前端取消收藏的不会引用collectId
    • ¥15 delphi7 HMAC_SHA256方式加密
    • ¥15 关于#qt#的问题:我想实现qcustomplot完成坐标轴
    • ¥15 下列c语言代码为何输出了多余的空格