将负数移到左边,先到先得

时间:2019-07-10 20:06:23

标签: c#

我正在尝试将负数向左移动。

using System;

class Class1
{
    static void rearrange(int[] arr, int n)
    {

        int j = 0, temp;
        for (int i = 0; i < n; i++)
        {
            if (arr[i] < 0)
            {
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
                j++;     
            }
        }
    }

    static void printArray(int[] arr, int n)
    {
        for (int i = 0; i < n; i++)
            Console.Write(arr[i] + ",");
    }

//Call the Method
    public static void Main()
    {
        int[] arr = { 1, -4, -7, 4, -2, 6, -9 };
        int n = arr.Length;
        rearrange(arr, n);
        printArray(arr, n);
    }
}

该问题需要输出{-4,-7,-2,-9,1,4,6} 但是我的输出是{-4,-7,-2,-9,1,6,4},因为代码是用4切换-9。 如何调整密码?

3 个答案:

答案 0 :(得分:0)

使用LINQ会更简单吗? 这是使用LINQ完成您需要的代码:

myUserObject.getProperty("myColumnName");

输出:

var list = new[]{ 1, -4, -7, 4, -2, 6, -9 };
var newList = list.Where(x => x < 0).Union(list.Where(x => x >= 0)).ToList();
Console.WriteLine(string.Join(", ", newList));

答案 1 :(得分:0)

问题似乎出在代码始终将负数与应该位于负数的位置的数字交换。当连续有几个正数时,这将成为一个问题,因为当低索引中的正数与高索引中的负数交换时,顺序会受到干扰。当i4-21交换时会发生这种情况(因此,此时数组看起来像{ -4, -7, -2, 4, 1, 6, -9 });再一次,当i6并且-94交换时,结果提示您的问题将留给您。

要解决此问题,您必须在内部循环中将负数与它前面的数字交换,直到它前面的数字也为负,以便数字保持其相对位置:

static void Rearrange(int[] arr)
{
    // Start at index 1 since the first item can't move left
    for (int i = 1; i < arr.Length; i++)
    {
        if (arr[i] < 0)
        {
            // Walk backwards from the current index, swapping items as we
            // go, until the item in the previous index is also negative
            for (int j = i; j > 0; j--)
            {
                // If previous item is negative, we can stop
                if (arr[j - 1] < 0) break;

                // Otherwise, swap this item with the previous item
                int temp = arr[j];
                arr[j] = arr[j - 1];
                arr[j - 1] = temp;
            }
        }
    }
}

答案 2 :(得分:-1)

在最后一次迭代之前,数组处于此状态:

  

{-4,-7,-2,4,1,6,-9}

您的算法然后将-9和4交换:

  

{-4,-7,-2, -9 ,1、6, 4 }

为什么要期望6是数组中的最后一个数字?

如果您希望对数字进行排序,C#提供了一种.OrderBy扩展方法,但这也将更改负数的顺序。