JAVA:如何按照下一个最接近的值对数组进行排序?

时间:2012-10-05 04:14:52

标签: java arrays sorting numbers closest

我是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在其余条目中不同25365除外)。同样,下一个条目是37,它在剩余条目中最接近67

感谢任何帮助!!!

2 个答案:

答案 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]
}