我是java的新手。我已经看到了按升序/降序排序数字的算法,其中第一个条目是最小/最大。我从未见过一种算法可以将元素排序到最接近的值,保持第一个条目不变。
例如: array = 53,98,183,37,122,14,124,65,67
并返回:
array = 53,65,67,37,14,98,122,124,183
为了更好地解释这个例子,请注意在输出中,第一个条目53
不变。下一个条目是65
,它最接近所有剩余条目,最小差异为12
。在65
之后,其67
在其余条目中不同2
(53
和65
除外)。同样,下一个条目是37
,它在剩余条目中最接近67
。
感谢任何帮助!!!
答案 0 :(得分:3)
这应该这样做。
int[] array = new int[] {53, 98, 183, 37, 122, 14, 124, 65, 67};
for(int i = 0; i < array.length; i++) {
int currentValue = array[i];
int distance = Integer.MAX_VALUE;
for(int j = i+1; j < array.length ; j++) {
if(Math.abs(array[j] - currentValue) < distance ) {
distance = Math.abs(array[j] - currentValue);
int temp = array[i+1];
array[i+1] = array[j];
array[j] = temp;
}
}
}
输出53 65 67 37 14 98 122 124 183
答案 1 :(得分:1)
伪代码,未经测试:
for i in 0..array.length-1
{
min=MAX_INT
minIndex=0
for j in i+1..array.length-1
{
diff=abs(a[j]-a[i])
if diff < min
{
min = diff
minIndex=j
}
}
swap a[i+1] with a[minIndex]
}