Mam problem z taką oto funkcją sortującą tablicę:
static void Sort(int[] array)
{
int n = array.Length;
for (int i = 0; i < n - 1; i++)
{
int minIndex = i;
for (int j = i + 1; j < n; j++)
{
if (array[j] < array[minIndex])
{
minIndex = j;
}
int temp = array[minIndex];
array[minIndex] = array[i];
array[i] = temp;
}
}
}
Otóż dla danych wejściowych np. 5 elementowej tablicy: {5, 4, 2, 3, 1}, funkcja zwraca {1, 3, 2, 4, 5} co jest oczywiście źle.
Poprawiłem ten program (bo jest z internetu) i zamiast deklarować zmienne minIndex i temp w pętlach, zrobiłem to przed nimi i teraz już działa:
static void Sort(int[] array)
{
int temp, minIndex;
int n = array.Length;
for (int i = 0; i < n - 1; i++)
{
minIndex = i;
for (int j = i + 1; j < n; j++)
{
if (array[j] < array[minIndex])
{
minIndex = j;
}
temp = array[minIndex];
array[minIndex] = array[i];
array[i] = temp;
}
}
}
I tu pada moje pytanie. Czy ktoś może mi wyjaśnić czym się różni w tym przypadku jeżeli zadeklaruję zmienne tmp i minIndex w pętli a na zewnątrz? Bo tego nie rozumiem.