使用符号(正,零,负)对int数组进行排序,而不使用sort方法

时间:2017-01-08 22:38:54

标签: java sorting

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;
  }

我的代码适用于排序正数和负数,但我不确定如何对零进行排序。负片应在左侧,中间为零,右侧为正片。订单无关紧要。

2 个答案:

答案 0 :(得分:1)

使用辅助交换方法,您可以像这样处理零:

?12

试试here!

答案 1 :(得分:1)

实际上,您的代码没有正确if( foo ) doSomething(); 正数,可能是因为它的sort数量不足。为了对所有数字(包括零)进行排序,我建议回到冒泡排序,例如:

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; } } } } 任何内容,因为只对实际数组进行了更改。

修改

使用一个for循环对数组进行排序的另一种解决方案(即return复杂度):

O(n)