关于在C#中交换数组中项目的考试练习

时间:2012-06-02 14:24:47

标签: c# arrays swap

所以考试题目是:

  

使用下面的方法标题编写方法。

public void Reverse( double [] values, int start, int finish){  
     

此方法将在较低的数组之间反转数组中的元素   指数位置和上指数位置。

     

所以给出了以下数组声明

double [] data = {8.5, 12.0, 23.2, 18.0, 15.5, 5.0, 10.5};
     

调用方法Reverse(data, 2, 5);之后的内容   数据将是

{8.5, 12.0, 5.0, 15.5, 18.0, 23.2, 10.5}
     

假设您已经编写了一个名为swap的交换方法   数组中的两个元素;两个指数所确定的要素   值作为参数传递:

Swap(array, oneIndex, otherIndex)

我这样回答:

public void Reverse( double [] values, int start, int finish){  

do {
    Swap(values, int start, int finish);
    }
    start++;
    finish--;
}
while (start < finish)

我认为我的答案不正确,但我想不出别的。 Swap()方法已经完成了所有工作。有人可以纠正我吗?感谢

3 个答案:

答案 0 :(得分:2)

交换接受oneIndex和otherIndex,而不是开始和结束。
你错过的是开始和结束之间的循环,你必须用每个迭代的数字调用swap方法:

int iterationsNum = (finish - start) / 2 ;
for(int i=0;i<=iterationsNum;i++)
{
    if(start+i != finish-i)
    {
      swap(values, start+ i, finish-i);
    }
}

可能有一种方法可以删除不必要的迭代,我检查索引是否相同,但这是基本概念。

答案 1 :(得分:0)

如果您在函数中稍稍处理paranthesis并从函数调用中删除int,它将起作用。

public static void Swap(double[] values, int firstIndex, int secondIndex)
{
    double temp = values[start];
    values[start] = values[finish];
    values[finish] = temp;
}

public static void Reverse( double [] values, int start, int finish)
{
    do
    {
        Swap(values, start, finish);
        start++;
        finish--;
    }
    while (start < finish);
}

static void Main(string[] args)
{
    double[] data = { 8.5, 12.0, 23.2, 18.0, 15.5, 5.0, 10.5 };
    Reverse(data, 2, 5);
    foreach (double number in data)
        Console.Write(number.ToString() + ", ");
    Console.ReadKey();
}

给出:

8.5, 12, 5, 15.5, 18, 23.2, 10.5,

答案 2 :(得分:0)

还有两个可能的答案:

    static void Reverse(int[] values, int start, int finish)
    {
        int end = finish;
        for (int i = start; i < end ; i++)
        {
            Swap(values, i, end);
            end--;
        }
    }

    static void Reverse2(int[] values, int start, int finish)
    {
        int upper = finish;
        int lower = start;

        while (upper > lower)
        {
            Swap(values, lower, upper);
            lower++;
            upper--;
        }
    }