Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Алгоритм] Проблемы с сортировкой массива


Автор: IwantToBeProgrammer 9.7.2007, 14:17
К массиву X=(1,3,6,2,7,4,8,5) применяется алгоритм сортировки:

нц для j от 2 до n      'n должно быть 8
i=j-1
y=x[j]
     нц пока y>x[i] и i>0
     x[i+1]=x[i]
     i=i-1
     кц
x[i+1]=y
кц

Сколько раз в процессе сортировки изменяются значения элементов массива?
28, 30,27,26 или 29?

Предлагаю свою версию решения:
1)   i=1; j=2;y=x[j]=3
x(2)=x(1)=1 (т.к. 3>1 и 1>0)
-------
x(1)=3

2)   i=2; j=3; y=6
x(3)=x(2)=1 (6>1 и 2>0)
x(2)=x(1)=3 (6>3 и 1>0)
-------
x(1)=6

3)   i=3; j=4; y=2
x(4)=x(3)=1 (2>1 и 3>0)
x(3)=x(2)=3 (но 2<3 => отсюда и далее - не подходит)
-------
x(1)=2

4)   i=4; j=5; y=7
x(5)=x(4)=1 (7>1 и 4>0)
x(4)=x(3)=1 (7>1 и 3>0 но значение не изменилось => не подходит)
x(3)=x(2)=3 (7>3 и 2>0)
x(2)=x(1)=2 (7>2 и 1>0)
-------
x(1)=7

5)   i=5; j=6; y=4
x(6)=x(5)=1 (4>1 и 5>0)
x(5)=x(4)=1 (4>1 и 4>0 - значение элемента не изменилось)
x(4)=x(3)=1 (4>3 и 3>0)
x(3)=x(2)=1 (4>2 и 2>0)
x(2)=x(1)=1 (4<7 и 1>0 - не подходит)
-------
x(1)=4

6)   i=6; j=7; y=8
x(7)=x(6)=1 (8>1 и 6>0)
x(6)=x(5)=1 (8>1 и 5>0 - значение элемента не изменилось)
x(5)=x(4)=3 (8>3 и 4>0)
x(4)=x(3)=2 (8>2 и 3>0)
x(3)=x(2)=2 (8>2 и 2>0 - значение элемента не изменилось)
x(2)=x(1)=4 (8>4 и 1>0)
-------
x(1)=8

7)   i=7; j=8; y=5
x(8)=x(7)=1 (8>1 и 6>0)
x(7)=x(6)=1 (8>1 и 6>0 -  значение элемента не изменилось)
x(6)=x(5)=3 (8>1 и 6>0)
x(5)=x(4)=2 (8>1 и 6>0)
x(4)=x(3)=2 (8>1 и 6>0 -  значение элемента не изменилось)
x(3)=x(2)=4 (8>1 и 6>0)
x(2)=x(1)=8 (8>1 и 6>0)
-------
x(1)=5

В сумме выходит значения элементов менялись 26 раз, но ответ почемуто 29. Впрочем я просто недоверяю системе ответов, потому прошу проверить алгоритми написать сколько же всётаки раз здесь происходит изменение знач. элем. при сортировке... smile 



Автор: JackYF 9.7.2007, 16:24
IwantToBeProgrammer, хех.
Программа выдала - 28.

Прога следующая, проверяйте:
Код

#include <iostream>

int main()
{
    int x[] = { 0xFFFF, 1,3,6,2,7,4,8,5 };
    int y,i;

    int __ic = 0; //instruction counter
    for (int j = 2; j <= 8; ++j )
    {
        i = j - 1;
        y = x[j];
      while ( y > x[i] && i > 0 )
      {
            x[i+1] = x[i];
            --i;
            ++__ic;
      }
        x[i+1] = y;
        ++__ic;
    }

    for ( int j = 1; j <= 8; ++j )
    {
        printf("%i ", x[j]);
    }

    printf("Instructions count: %i\n", __ic);
}


Автор: SoWa 9.7.2007, 20:39
Ты может на бумаге плохо сортируешь?

Автор: IwantToBeProgrammer 9.7.2007, 22:00
Цитата(SoWa @ 9.7.2007,  20:39)
Ты может на бумаге плохо сортируешь?

на бумаге-то лучше сортирую чем в компе даж)

Вот я и думаю, вроде всё правильно и нормально,а чёт не сходится хотя в элементарных вопросах система ответов даёт неверные ответы.
так что не знаю неправильно ли это вообще? что касается языков то С не владею. по мне лучше переделать всё под Basic. и всё же вопрос остаётся открытиым: какой ответ реально правильный и что неверно в моём решении, если таковое неправильное есть??...

Автор: IwantToBeProgrammer 10.7.2007, 19:22
JackYF,  и все остальные: разобралося с сортировкой методом пузырька
ответ по составленной в С программе верен. прошу в той же программе проверить ещё несколько массивов на тот же алгоритм:
X(4,2,6,1,8,3,7,5)
X(2,4,5,1,7,6,8,3)
X(1,2,6,7,8,5,4,3)
X(3,2,1,6,7,8,4,5)
X(3,1,4,7,8,2,6,5)

Автор: JackYF 12.7.2007, 09:29
Эх... ты бы уже сам запустил программу... вот результаты:

4,2,6,1,8,3,7,5 - 24.
2,4,5,1,7,6,8,3 - 26.
1,2,6,7,8,5,4,3 - 23.
3,2,1,6,7,8,4,5 - 26.
3,1,4,7,8,2,6,5 - 25.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)