【发布时间】:2020-01-15 16:29:51
【问题描述】:
我一直在研究一种将数组从最低到最高排序的方法。 我想出了下面的代码,但正如您可能猜到的那样,它并没有达到我的预期。
我希望应用的逻辑如下:
假设我有一个数组,例如数组 {4,3,1,2,5} 例如,代码会将数组 [0](在本例中为 4)与数组中的每个元素进行比较,
array[0]>array[0] (4>4=false),
array[0]>array[1] (4>3)= +1counter,
array[0]>array[2] (4>1)= +1counter,
array[0]>array[3] (4>2)= +1counter,
array[0]>array[4] (4>5=false)
counter = 3
因此,由于计数器值现在为 3,因此在新数组(array2 或 arrayOrdered)中,数字 4 将位于第三个索引中。
我应该如何解决它?任何帮助都非常感谢!
public static int[] OrderArray(int[] array)
{
int[] array2=new int[array.length];
for (int i=0; i<array.length; i++)
{
int place=0;
for (int j=0; j<array.length;j++)
{
if (array[i]> array[j])
{
place = place+1;
}
array2[place] = array[i];
}
}
return array2;
}
【问题讨论】:
-
您是否有充分的理由不简单地使用
Arrays.sort? (或者,IntStream.of(array).sorted().toArray(),或者许多其他选择之一)(或者,尝试实现一个众所周知的算法) -
您在此处尝试应用的方法是“计算小于第 i 个元素的元素数;将第 i 个元素放在第 i 个位置”。例如,如果输入中有相等的元素,这不起作用。
-
如果数组是[4,5,1,2,3]怎么办?这个算法会给你错误的结果。所以换个方向思考吧。