[Homework] Arrays, Lists, Stacks, Queues - Problem 2 - Софтуерен университет

[Homework] Arrays, Lists, Stacks, Queues - Problem 2 - Софтуерен университет

+ Нов въпрос
Bogdan1899 avatar Bogdan1899 50 Точки

[Homework] Arrays, Lists, Stacks, Queues - Problem 2

Здравейте, Колеги!

От известно време се занимавам с посочената задача и се опитвам да разбера защо "Swap" метода не работи. Вече съм решил задачата, като съм разменил цифрите с помощта на трета променлива, но искам да го направя и чрез "Swap" метод. Ще съм благодарен, ако някой погледне къде е проблема.

 

http://pastebin.com/EeYPHtk0

Тагове:
1
Technology Fundamentals 20/09/2015 14:40:35
KatyaMarincheva avatar KatyaMarincheva 572 Точки

Здравей, Богдане,

алгоритъмът ти е интелигентно измислен - работи с основня array, без да използва допълнителни колекции - точно такива задачи дават на интервюта за работа.

Имаше само един проблем:

                int currNum = numArr[i];
                int currNum2 = numArr[min];
                Swap(ref currNum, ref currNum2);

Тук ти успешно разменяш стойностите на currNum и currNum2, но после това не оказва никакво вияние върху съответните числа в самия array.

Това вече сортира:

                //int currNum = numArr[i];
                //int currNum2 = numArr[min];
                Swap(ref numArr[i], ref numArr[min]);

1
Bogdan1899 avatar Bogdan1899 50 Точки

Благодаря, Катя за бързия и точен отговор :)

1
kidroca avatar kidroca 117 Точки

Здравей,

Метода работи но не по начина по който искаш,

ако си направиш един Console.WriteLine(currNum + " " + currNum2) ще видиш че са се разменили

int currNum = numArr[i]

int currNum2 = numArr[min];

Swap(ref currNum, ref currNum2);

currNum е int от стойността във numArr[i] и curNum2 е int от стойността във numArr[min] 

те придобиват стойността от масива но не пазят референция към индекса от масива от който са я взели, след тоав ги подавап по референция но тази референцията е до curNum a не до  numArr[i]

За да се промени стойността във самия масива в случея трябва да я посочиш по индекс:

или след метода Swap() да кажеш numArr[i] = curNum и съответно numArr[min] = currNum2 или:

Пробвай със този метод:

като съответно подадеш масива и индексите които искаш да се разменят

static void Swap<T>(T[] arr, int i, int j)
    {
        T temp = arr[i];

        arr[i] = arr[j];
        arr[j] = temp;
    }

Самият масив винаги се подава като референция, но за изваденни данни от него зависи от какъв тип са те.

В товя случей ги подаваш по референиця но референцията не е до данните масива.

1
20/09/2015 15:45:04