2017-01-08 8 views
0
public static int[] sortBySign(int[] nums){ 
     int startIndex = 0; 
     int endIndex = nums.length - 1; 
while(startIndex < endIndex){ 
    while(nums[startIndex] < 0){ 
      startIndex++; 
    } 
    while(nums[endIndex] > 0){ 
      endIndex--; 
    } 
      int temp = nums[startIndex]; 
      nums[startIndex] = nums[endIndex]; 
      nums[endIndex] = temp; 
      startIndex++; 
      endIndex--; 
     } 
    return nums; 
    } 

私のコードは正と負の数値をソートするために機能しますが、ゼロをソートする方法もわかりません。ネガは左側に、ゼロは中央に、右側にはポジティブにする必要があります。順序は関係ありません。あなたはそのようなゼロを扱うことができる補助スワップ方式を使用してソートメソッドなしで符号(正、ゼロ、負)でint配列をソート

+1

は、あなたのデバッガでコードを強化していますか?これはあなた自身が何が起こる必要があるかを判断するのに役立ちます。 –

答えて

1

public static int[] sortBySign(int[] array) { 
    int counter = 0; 
    for (int i = 0; i < array.length; i++) { 
    if (array[i] < 0) { 
     swap(array, counter++, i); 
    } 
    } 
    for (int i = counter; i < array.length; i++) { 
    if (array[i] == 0) { 
     swap(array, counter++, i); 
    } 
    } 
    return array; 
} 

private static void swap(int array[], int index1, int index2) { 
    int temp = array[index2]; 
    for (int i = index2; i > index1; i--) { 
    array[i] = array[i - 1]; 
    } 
    array[index1] = temp; 
} 

が、それは十分に番号をやっていないかもしれないので、実際には、あなたのコードが正しくないsort正の数を行いhere!

1

それを試してみてくださいiterationsです。 (ゼロを含む)すべての数字を並べ替えるには、私は例えば、バブルソートにフォールバックをお勧めします。:

public static void sort(int[] array) { 
    for (int i = 0; i < array.length; i++) { 
     for (int j = 1; j < (array.length - i); j++) { 
      if (array[j - 1] > array[j]) { 
       int temp = array[j - 1]; 
       array[j - 1] = array[j]; 
       array[j] = temp; 
      } 
     } 
    } 
} 

変更は唯一、実際の配列に行われているとしても、我々はreturn何もする必要はありません。

編集

ループのための1、(すなわちO(n)複雑)で配列をソートする別の解決策:

public static void sort(int[] array) { 
    boolean continue = false; 
    for (int i = 0; i < array.length - 1; i++) { 
     if (array[i] < array[i + 1]) { 
      int temp = array[i]; 
      array[i] = array[i + 1]; 
      array[i + 1] = temp; // swap values 
      continue = true; 
     } 
     if (i == array.length - 2 && again) { 
      i = 0; 
      continue = false; 
     } 
    } 
} 
+0

ありがとうございます。私はそれがO(n)になるように実装しようとしていました。 – laura815

+0

@ laura815私は別の解決策を追加しました。 –

関連する問題