Задать вопрос
@Dreaded

Есть ли разница в реализации алгоритма сортировки?

Начал проходить курс CS50, после просмотра лекции написал алгоритм сортировки пузырьком, мой вариант:

int array[]={2,4,5,9,1,0,7,6,3,8};
    int counter;
    do
    {
        counter=0;
        for(int i=0; i < sizeof(array)/sizeof(array[0])-1; i++)
            {
                if(array[i]>array[i+1])
                {
                    int temp=array[i];
                    array[i]=array[i+1];
                    array[i+1]=temp;
                    counter++;
                }
            }
    }
    while (counter>0);


Потом, конечно же, пошел гуглить "как правильно", и викибукс выдаёт вот такой вариант:

for(i = 0 ; i < n - 1; i++) { 
       // сравниваем два соседних элемента.
       for(j = 0 ; j < n - i - 1 ; j++) {  
           if(a[j] > a[j+1]) {           
              // если они идут в неправильном порядке, то  
              //  меняем их местами. 
              int tmp = a[j];
              a[j] = a[j+1] ;
              a[j+1] = tmp; 
           }
        }
    }


Есть ли принципиальная разница между этими двумя вариантами? Если да - то в чем мой вариант плох?
  • Вопрос задан
  • 286 просмотров
Подписаться 2 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Алгоритмы и структуры данных
    4 месяца
    Далее
  • Skillbox
    Алгоритмы и структуры данных для разработчиков
    3 месяца
    Далее
  • Stepik
    Алгоритмы и структуры данных
    1 неделя
    Далее
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
Принципиальной разницы нет, только имена переменных отличаются и while вместо for

Но вы же знаете, что это один из самых медленных алгоритмов?
https://www.youtube.com/watch?v=ZZuD6iUe3Pc
Ответ написан
@DVoropaev
Ставлю + к карме на хабре за ответы на вопросы
Ну вообще-то, вы оптимизировали алгоритм сортировки, добавив проверку, были какие нибудь изменения во время внутреннего цикла for или нет. То есть, если программе будут попадаться почти отсортированные массивы, то ваш код будет работать на много быстрее.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы