Java 数组中元素按值排序的算法
我很难想出一个算法来对三个随机值进行排序,这三个值被放入一个数组中Java 数组中元素按值排序的算法,java,arrays,algorithm,Java,Arrays,Algorithm,我很难想出一个算法来对三个随机值进行排序,这三个值被放入一个数组中 int[] sortArray = anArray; if (anArray[0] >= anArray[1]){ sortArray[1] = anArray[0]; sortArray[0] = anArray[1]; } else if (sortArray[1] >= anArray[2]){ sortArray[2] = sortArray[1];
int[] sortArray = anArray;
if (anArray[0] >= anArray[1]){
sortArray[1] = anArray[0];
sortArray[0] = anArray[1];
} else if (sortArray[1] >= anArray[2]){
sortArray[2] = sortArray[1];
sortArray[1] = anArray[2];
} else if (sortArray[0] >= sortArray[1]){
sortArray[1] = anArray[0];
} else if (sortArray[0] >= sortArray[2]){
sortArray[2] = anArray[0];
} else {
}
这就是我一直在玩弄的东西,我不能让它在每一个随机生成的数字中工作
输出
The original array:
Entry 0 is 9
Entry 1 is 5
Entry 2 is 0
The sorted array:
Element 0 is 9
Element 1 is 9
Element 2 is 0
任何工作算法,无论是否是伪代码,都将非常感激。首先要理解,只有一个if条件才能满足您编写的所有条件 代码中的问题:
如果我拿走你的数据集,那它将是第一个。 在该块中,您只指定了两个值,而不是所有三个值。
解决方案:
使用嵌套if检查或和/或条件了解值的顺序。 并更改代码以在一个块中指定所有三个值 范例
if (anArray[0] >= anArray[1] ){
if(anArray[0] >= anArray[2]){
// found max value anArray[0]
sortArray[0] = anArray[0];
// find the max of remaining values by using anArray[2] > anArray[1]
// set the 2nd and 3rd value
if(anArray[2] > anArray[1]){
sortArray[1] = anArray[2];
sortArray[2] = anArray[1];
}else{
sortArray[1] = anArray[1];
sortArray[2] = anArray[2];
}
}else{
// found max value in anArray[2]
sortArray[0] = anArray[2];
// array[0] is greater than array[1] in top if .So we know order of anArray[0] and anArray[1]
sortArray[1] = anArray[0];
sortArray[2] = anArray[1];
}
} else{
if(anArray[1] >= anArray[2]){
// found max value as anArray[1]
sortArray[0] = anArray[1];
// finding order between anArray[0] and anArray[2]
if(anArray[0] >= anArray[2]){
sortArray[1] = anArray[0];
sortArray[2] = anArray[2];
}else{
sortArray[1] = anArray[2];
sortArray[2] = anArray[0];
}
}else{
//found max value as anArray[2]
sortArray[0] = anArray[2];
// the order between anArray[1] and anArray[0] we already know
sortArray[1] = anArray[1];
sortArray[2] = anArray[0];
}
}
上面的解决方案是使用if嵌套
使用和/或您可以按以下方式执行此操作-
if (anArray[0] >= anArray[1] && anArray[0] >= anArray[2] && anArray[2] >= anArray[1] ){
sortArray[0] = anArray[0];
sortArray[1] = anArray[2];
sortArray[2] = anArray[1];
}else if (anArray[0] >= anArray[1] && anArray[2] >= anArray[0] ){
sortArray[0] = anArray[0];
sortArray[1] = anArray[1];
sortArray[2] = anArray[2];
}else if (anArray[1] >= anArray[0] && anArray[1] >= anArray[2] && anArray[0] >= anArray[2] ){
sortArray[0] = anArray[1];
sortArray[1] = anArray[0];
sortArray[2] = anArray[2];
}else if (anArray[1] >= anArray[0] && anArray[2] >= anArray[1] ){
sortArray[0] = anArray[2];
sortArray[1] = anArray[1];
sortArray[2] = anArray[0];
}
很明显,上述代码可能有缺陷,不推荐使用。最好的选择是使用
Arrays.sort(anArray)
从集合api。这是最好的方法:
Arrays.sort(anArray);
使用循环并对它们进行排序。这是一个赋值吗?如果没有,就使用。正常排序有什么问题
anArray.sort(comparator)
?在sortArray
中设置最多2个值时,由于您的else if结构,因此进行排序。这到底是怎么回事?