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 に答える