2

我一直在努力解决这个问题:

假设我有一个数组:

int[] n = {0, 0, -1, 1, 0, 1, 1, -1, 1};

我需要能够对数组进行排序,如果前面有一个零和一个非零,那么它们应该被交换。

例如:0, 0, -1, 1, 0, 1, 1, -1, 1

会变成:0, 0, -1, 0, 1, 1, 1, -1, 1

我一直在尝试使用没有运气的for循环和if语句来做到这一点。有小费吗?

4

5 回答 5

3

试试这个:

for (int i = 1 ; i < n.length ; i++)
    if (n[i] == 0 && n[i - 1] != 0) {
        int tmp = n[i - 1];
        n[i - 1] = n[i];
        n[i] = tmp;
    }

您认为您需要一个在其主体中for包含语句的循环是正确的。if我们在这里所做的只是从元素 1 开始循环遍历数组。然后我们检查我们当前所在的元素是否是0 并且前一个元素不是0:即if (n[i] == 0 && n[i - 1] != 0)。如果这个条件为真,我们交换这两个元素。

于 2012-09-29T13:46:33.870 回答
2
for(int i=0; i < length; i++)
{
    if(i > 0 && arr[i] == 0 && arr[i-1] != 0)
    {
        int temp = arr[i-1];
        arr[i-1] = arr[i];
        arr[i] = temp;
    }
}

应该管用。

于 2012-09-29T13:50:38.767 回答
0

如果不使用位旋转,您将需要一个临时变量来交换两个对象。例子:

int[] n = {...};
int temp = n[3]; // swaps n[3] and n[4]
n[3] = n[4];
n[4] = temp;

你可以在你的循环中粘贴这样的东西来完成你所描述的。

于 2012-09-29T13:47:12.120 回答
0
public class Swaparray 
{
     public static void main(String []args)
     {
        int [] arr={0,1,2,3,4,5,6,7};
         Swaparray.displayArray(arr);
         for(int i=1;i<arr.length;i++)
         {
         while(arr[i]%2!=0)
         {
        int tmp = arr[i - 1];
        arr[i - 1] = arr[i];
        arr[i] = tmp;
        }
        }
        Swaparray.displayArray(arr);
                     }
   static void displayArray(int[]arr)
   {
       System.out.print("Array elements are: ");
       for(int i=0;i<arr.length;i++) {
           System.out.print(arr[i]+" "); }
       System.out.println();
       }
}

o/p 数组元素为:0 1 2 3 4 5 6 7 数组元素为:1 0 3 2 5 4 7 6

交换数组中的两个连续元素

于 2018-08-12T06:13:07.800 回答
0
 int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
 int length = arr.length;
 int temp;
 for (int i = 0; i < length/2; i++)
   {
    temp = arr[i];
    arr[i] = arr[length - i - 1];
    arr[length - i - 1] = temp;
   }

 for (int element:arr)
  {
    System.out.println (element);
  }
于 2019-08-22T07:35:22.347 回答