编写一个程序,如果给定一个字符数组,它将输出索引从最大到最小的数组(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]。请不要忘记将问题标记为已回答