Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编写一个程序,如果给定一个字符数组,它将输出索引从最大到最小的数组(java)_Java_Arrays_Sorting - Fatal编程技术网

编写一个程序,如果给定一个字符数组,它将输出索引从最大到最小的数组(java)

编写一个程序,如果给定一个字符数组,它将输出索引从最大到最小的数组(java),java,arrays,sorting,Java,Arrays,Sorting,因此,我正在解决一个问题,如果我有一个字符数组,它希望我按照从最大到最小的顺序排列它们,但是按照索引而不是实际的字母排列。因此,例如,a[]={'a','z','p'}输出数组类似于'b[]={1,2,0} 我知道如何将字符数组按降序排序,但现在我对如何将这两个数组关联起来感到困惑。我想我需要将原始数组复制到另一个数组中,然后以某种方式进行比较。但是我对我需要采取的步骤感到困惑。我的分类代码如下,仅供参考。如果有人能帮我,那就太好了。谢谢 public static void main(Stri

因此,我正在解决一个问题,如果我有一个字符数组,它希望我按照从最大到最小的顺序排列它们,但是按照索引而不是实际的字母排列。因此,例如,
a[]={'a','z','p'}
输出数组类似于'b[]={1,2,0}

我知道如何将字符数组按降序排序,但现在我对如何将这两个数组关联起来感到困惑。我想我需要将原始数组复制到另一个数组中,然后以某种方式进行比较。但是我对我需要采取的步骤感到困惑。我的分类代码如下,仅供参考。如果有人能帮我,那就太好了。谢谢

public static void main(String[]args){

       char[] a ={'f','a','z','v','t','u','i','j','o','c'};
       int[] b ;
     
     
     
       // Sort a
       for(int i= 0; i <= a.length-2;i++){
           
           int maxindex = i;
           
           for(int j = maxindex+1; j<a.length; j++){
               if(a[j]>a[maxindex]){
                   maxindex = j;
               }
           }
           // swap
           char temp = a[i];
           a[i] = a[maxindex];
           a[maxindex] = temp;
       }
       for(int i = 0; i < a.length; i++){
           System.out.print(a[i] + " ");
       }
   }
publicstaticvoidmain(字符串[]args){
char[]a={'f','a','z','v','t','u','i','j','o','c'};
int[]b;
//排序a

对于(inti=0;iHi!这比我想象的更具挑战性。以下是我所做的:

  • 从原始阵列复制一个副本
  • 对原始数组进行排序
  • 比较这两个数组,以便获得具有索引的数组
  • 就像你所想的,我认为你可以使用其他类型的结构来简化代码,但是如果你想练习java,那就没问题了

    char[] sorted = {'z','f','z','v','t','u','i','j','o','k','b'}; 
    
    // Let's copy it
    char[] copy = sorted.clone();
    
    // initialize b as an array of integer with the same size as 'sorted' array
    int[] b= new int[sorted.length];
    
     // Sort your original array (this is your code)
    for(int i= 0; i <= sorted.length-2;i++){
        
        int maxindex = i;
        
        for(int j = maxindex+1; j<sorted.length; j++){
            if(sorted[j]>sorted[maxindex]){
                maxindex = j;
            }
        }
        // swap
        char temp = sorted[i];
        sorted[i] = sorted[maxindex];
        sorted[maxindex] = temp;
    }
    
    // let's see what we got
    for(int i = 0; i < sorted.length; i++){
        System.out.print(sorted[i] + " ");
    }
    
    // now let's compare the original vs the sorted and get the indexes array
    for(int i = 0; i < sorted.length; i++){
        for(int k = 0; k < copy.length; k++){
            if ((copy[k] == sorted[i] && i == 0)  || (copy[k] == sorted[i] && k != b[i - 1]) ) {
                   b[i] = k; 
                   break;
               }                  
        }
    }
    
    
    System.out.print("\n");
    
    // let's see the indexes array
    for(int i = 0; i < b.length; i++){
        System.out.print(b[i] + " ");
    }
    
    char[]排序={'z','f','z','v','t','u','i','j','o','k','b'};
    //让我们复制它
    char[]copy=sorted.clone();
    //将b初始化为与“排序”数组大小相同的整数数组
    int[]b=新的int[sorted.length];
    //对原始数组排序(这是您的代码)
    
    for(int i=0;i好的,所以我的思路肯定是朝着正确的方向走的。对于最后一个for循环,比较排序数组和复制数组,你需要把整个if语句放在一起吗?如果你有if(copy[k]==sorted[i]),它不就行了吗?是的,你可以,但你不会得到一个“正确的”当原始数组中存在重复字符时,返回结果。例如:对于数组=['a','c','b','c'],您将随时得到[1,1,2,0]而不是[1,3,2,0]。请不要忘记将问题标记为已回答