0

我对java有点陌生。我已经看到了按升序/降序对数字进行排序的算法,其中第一个条目是最小/最大的。我从未见过可以将元素排序到最接近的值保持第一个条目不变的算法。

例如:数组= 53, 98, 183, 37, 122, 14, 124, 65, 67

并返回:

数组= 53, 65, 67, 37, 14, 98, 122, 124, 183

只是为了更好地解释这个例子,请注意在输出中,第一个条目53是不变的。下一个条目是65所有剩余条目中最接近的,最小差异为12。之后65,其余条目(不包括和)之间的67差异。同样,下一个条目是最接近剩余条目的条目。253653767

任何帮助表示赞赏!

4

2 回答 2

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

于 2012-10-05T04:34:04.643 回答
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]
}
于 2012-10-05T04:32:02.273 回答