Я правильно отслеживаю это? - PullRequest
1 голос
/ 02 апреля 2012

Мой учитель информатики назначил нам различные алгоритмы сортировки для ручной трассировки. Я хотел убедиться, что моя трассировка была правильной сортировка выбор:

void selection sort
{
  for(int i = 0; i < ray.length-1;i++)
  {
    int min = i
    for(int j = i +1; j<ray.length;j++;)
    {
      if(ray[j] < ray[min])
        min = j;
    }
    if(min != i)
    {
      int temp = ray[min]
      ray[min] = ray[i]
      ray[i] = temp;
    }
  }
}

исходный массив = {4,2,6,3,5,1} порядок сортировки:

1st pass - 2,4,6,3,5,1
2nd pass - 2,3,6,4,5,1
3rd pass - 2,3,4,6,5,1
4th pass - 2,3,4,5,6,1
5th pass - 2,3,4,5,1,6
6th pass - 2,3,4,1,5,6
7th pass - 2,3,1,4,5,6
8th pass - 2,1,3,4,5,6
9th pass - 1,2,3,4,5,6

1 Ответ

0 голосов
/ 02 апреля 2012

Ваши трассы не кажутся правильными

при запуске у вас есть массив

{4,2,6,3,5,1}

Во время внешнего цикла

min = i // i = 0 min = 0

Во время внутреннегоцикл вы делаете это

if(ray[j] < ray[min]) //2 < 4 TRUE (j = 1 min = 0)
   min = j;
//loop increment j
if(ray[j] < ray[min]) //6 < 2 FALSE (j = 2 min = 1)
//loop increment j
if(ray[j] < ray[min]) //3 < 2 FALSE (j = 3 min = 1)
//loop increment j
if(ray[j] < ray[min]) //5 < 2 FALSE (j = 4 min = 1)
//loop increment j
if(ray[j] < ray[min]) // 1 < 2 TRUE (j = 5 min = 1)
   min = j;
//loop increment j (j = 6 end loop)

if(min != i) //min = 5 i = 0 TRUE
   temp = ray[min] //temp = 1
   ray[min] ray[i] //ray[5] = ray[0] ray[5] = 4
   ray[i] = temp //ray[0] = 1

//loop increment i to 1 continue through this

Массив в этой точке

{1,2,6,3,5,4}

Вы должны быть в состоянии продолжить это для остальной части внешнего цикла

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...