@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; 
           }
        }
    }


Есть ли принципиальная разница между этими двумя вариантами? Если да - то в чем мой вариант плох?
  • Вопрос задан
  • 284 просмотра
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
Принципиальной разницы нет, только имена переменных отличаются и while вместо for

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

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

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