Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 02.08.2015
Сообщений: 15
1

Цикл while без тела

17.05.2018, 23:21. Просмотров 1356. Ответов 6
Метки нет (Все метки)

Доброго времени суток. Искал быструю сортировку массива из чисел типа int. Наткнулся на такое:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
void quick_sort( int * start, int * en ) 
{
  if( start != en )
    {
     int * left  = start;
     int * right = en;
     int * pivot = left++;
  while( left != right )
        {
         if(  *left < *pivot  )
           {
             ++left;
           }
         else
           {
             while( (left != --right) && ( *pivot < *right ) );
             swap( *left, *right );
           }
        }
        --left;
 
    swap( *start, *left );
    quick_sort( start, left );
    quick_sort( right, en );
  }
}
Собственно интересует цикл while в else. Он не содержит поля, однако если убрать его, либо убрать ";" в конце, то сортировка перестает работать. Вопрос: почему и как это работает. start - указатель на первый элемент, en - указатель за последний элемент. Заранее спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.05.2018, 23:21
Ответы с готовыми решениями:

Цикл без тела
Доброго всем дня! Читаю книжку, раздел управляющие конструкции, и тут встречаю вот такое...

Какое назначение может иметь в программе приведенный цикл без тела?
for (t=0; t&lt;SOME_VALUE; t++);

Найти КПД цикла, количества тепла, отнятого у холодного тела за один цикл.
Идеальная холодильная машина, работающая по обратному циклу Карно, совершает за один цикл работу...

Http запрос без получения тела ответа
Есть ли заголовки, чтобы сервер не отправлял тело ответа? Меня интересует только код ответа.

6
55 / 55 / 63
Регистрация: 18.03.2014
Сообщений: 386
17.05.2018, 23:49 2
он работает с помощью префиксного декремента
C++
1
--right
то есть на каждом условии значения right будет уменьшаться на 1, пока left != right
0
0 / 0 / 0
Регистрация: 02.08.2015
Сообщений: 15
17.05.2018, 23:54  [ТС] 3
Чтобы right уменьшился обязательно ли выполнение второго условия?
0
55 / 55 / 63
Регистрация: 18.03.2014
Сообщений: 386
17.05.2018, 23:56 4
нет, так как сначала проверяется первое условие, и только потом, если первое условие true, то проверяется второе. этот порядок для "И" (&&)
0
0 / 0 / 0
Регистрация: 02.08.2015
Сообщений: 15
18.05.2018, 00:05  [ТС] 5
А для чего тогда нужно второе условие?
0
55 / 55 / 63
Регистрация: 18.03.2014
Сообщений: 386
18.05.2018, 00:15 6
Цитата Сообщение от programmist99 Посмотреть сообщение
если первое условие true, то проверяется второе
бинарная операция "И" возвращает true только тогда, когда оба условия равны true. Если первое условие false, то проверять второе уже нет смысла
0
0 / 0 / 0
Регистрация: 02.08.2015
Сообщений: 15
18.05.2018, 00:21  [ТС] 7
Это понятно, я имею в виду какое влияние оказывает сравнение этих двух чисел? В первом условии right с каждой итерацией уменьшается на единицу, во втором же условии вроде ничего не происходит. Да и какое значение (true или false) принимает все выражение, вроде как тоже не важно. Или я что-то не так понимаю?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.05.2018, 00:21

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Найти закон движения тела, свободно падающего без начальной скорости
Помогите составить уравнение: Найти закон движения тела, свободно падающего без начальной скорости,...

Перемещение тела при прямолинейном равноускоренном движении без начальной скорости
№1: Поезд начинает равноускоренное движение из состояния покоя и проходит за четвертую секунду 7 м....

Рассчитать траекторию космического тела в поле тяготения планеты без учета сил сопротивления
помогите пожалуйста очень срочно надо нужно набрать на паскале помогите!!! рассчитать траекторию...

Успеет ли температура воды сравняться с температурой тела, если душ будет без сильного напора
Ребят, суть такая. Нестандартная задачка для реально физиков ) Итак: Есть человек с ожогом 2...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.