【问题标题】:JAVA: How can I sort an array by its next nearest value? [closed]JAVA:如何按下一个最接近的值对数组进行排序? [关闭]
【发布时间】:2012-10-05 04:14:52
【问题描述】:

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

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

并返回:

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

只是为了更好地解释示例,请注意在输出中,第一个条目53 未更改。下一个条目是65,它是所有剩余条目中最接近的,最小差异为12。在65之后,它的67在其余条目(不包括5365)之间有2的差异。同理,下一个条目是37,在其余条目中最接近67

感谢您的帮助!!!

【问题讨论】:

  • 您的要求不明确。起初我以为你是按差异排序的,但事实并非如此。你能更清楚地解释想要的结果吗?在这种情况下,“更接近”是什么意思?
  • 您是从数组中的第一个元素开始还是从数组中的最大元素开始?如果您从数组中的最大值开始,则按降序排序。
  • 我认为他从第一个开始...53大于37。他(我认为)询问如何按升序对所有数字进行排序...等等...“67更接近37" ???
  • 啊,我想我现在明白了。第一个元素被锚定并保持在数组 [0] 中。对于 n>0,您选择 x 处的元素,使得 abs(a[x]-a[n-1]) 最小,然后重复直到您选择了所有元素。
  • 标准问题:你尝试过什么?并且:这可能属于Software Engineering,因为它更多的是算法问题而不是编码问题。

标签: java arrays sorting numbers closest


【解决方案1】:

应该这样做。

    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

【讨论】:

    【解决方案2】:

    伪代码,未经测试:

    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-11-30
      • 1970-01-01
      • 2022-11-21
      • 2020-07-24
      • 2022-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多