2 sinat 25234961 sinat_25234961 于 2016.05.05 10:44 提问

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);
    }

}

1个回答

CSDNXIAON
CSDNXIAON   2016.05.05 10:52
已采纳

Java输出数组的内容
Java输出数组的内容
Java输出数组的内容
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
有关Java中两个整数的交换问题
在程序开发的过程,要交换两个变量的内容,是一种比较常见的事情。在排序算法中,就有一种就叫做“交换排序法”。在所有的排序算法,交换要排序的集合中的两个元素,几乎是必须的过程。在Java中交换两个元素的内容,如果你是程序员新手,你可能碰到意想不到的问题。 众所周知,java和C、C++中都不能通过值传递的方式实现两个整数的交换。 即下面的函数是不能成功交换两个整数的,  public v
四种方法实现数组交换
方法一: //该方法主要用逻辑运算将数组对应的每个元素进行交换,然后用for循环将整个数组元素进行交换 #include&amp;lt;stdio.h&amp;gt; int main() { int i,j,k; int A[10]; int B[10]; int C[10]; printf(&quot;请输入A数组的内容:\n&quot;); for(i=0;i&amp;lt;10;i++) {scan...
1.将数组A中的内容和数组B中的内容进行交换。(数组一样大)
#include int main() {  int a[10]={1,2,3,4,5,6,7,8,9,10};  int b[10]={10,9,8,7,6,5,4,3,2,1};  int i=0;  for(i=0;i  {  a[i]=a[i]+b[i];  b[i]=a[i]-b[i];  a[i]=a[i]-b[i];  }  printf("now,a[10]
实现数组元素互换位置(乘机理解java参数传递)
Java中函数参数是按值传递的,在实现数组元素互换位置之前,我想先说一下Java函数参数传递过程。一般情况下我们会把参数分为基本数据类型和引用数据类型,然后分别来讲参数传递,因为他们的外在表现似乎是不同的,然而,他们的本质都是值传递 。在讲值传递时,请务必将“实参的副本”这五个字刻在脑海,因为它是理解值传递的关键。                      // 例子1
数组最大元素与最后一位元素进行交换最小元素与第一位元素进行交换,
public class MyDemo05 { public static void main(String[] args) { /*第三题:分析以下需求,并用代码实现: (1)定义一个int类型的一维数组,内容为{6,2,9,15,1,5,20,7,18}                             6 2 9 15 1 5 18 7  20 1 2 9 15 6 5 18
c语言:将数组A中的内容和数组B中的内容进行交换。(数组一样大)
将数组A中的内容和数组B中的内容进行交换。(数组一样大)方法一:#includevoid swap(int arr1[], int arr2[], int leng){int i = 0;for (i = 0; i leng; i++){int t = arr1[i];arr1[i] = arr2[i];arr2[i] = t;}} int main(){int i=0;int arr1[5] =
数组元素位置调换——改变算法后
/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * 作 者: 李兆庆 * 完成日期: 2012 年 9 月 18 日 * 输入描述: * 问题描述及输出:
【C语言】交换两个数组内容(数组一样大)
说明:(1)使用中间变量tmp,实现交换(2)注意交换函数实现时可传值(在main函数里面),引用,传指针的实现,具体可以参见我的博客:http://10740184.blog.51cto.com/10730184/1697629#include #include void swap(int* p1, int* p2) {     int tmp = *p1;     *p1 = *p2;   
【C语言】将数组A中的内容和数组B中的内容进行交换。(数组一样大)
#include int main() { int arr1[] = { 1, 3, 5, 7, 9 }; int arr2[] = { 3, 4, 5, 6 ,7 }; int tmp; int i = 0; for (i = 0; i { tmp = arr1[i]; arr1[i] = arr2[i]; arr2[i] = tmp; } for (i = 0;
将两个数组的内容进行交换
#include #pragma warning(disable:4996) #include int main() { int A[10] = { 1,2,3,4,5,6,7,8,9,0 }; int B[10] = { 0,9,8,7,6,5,4,3,2,1 }; int i = 0; //输出交换前的两个数组 printf("交换前:"); printf("A[10]=");