![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 1 Всего: 111 |
Вот тут я написал сортировку (quick sort). Нужно подсчитать кол-во перестановок и сранений (для набора чисел "87950433"):
Если кто может посоветовать правильно ли я считаю или нет, то буду очень рад. |
|||
|
||||
| kometa_triatlon |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 384 Регистрация: 7.1.2005 Где: Киев Репутация: 2 Всего: 6 |
Этот кусок
я бы заменил так:
Зачем запихивать инкремент с в условие? Все равно сравнение будет, хотя это только с точки зрения объема кода... А это:
лучше записать так:
Лишняя переменная там не нужна. -------------------- Всё очень просто: сказки обман, Солнечный остров скрылся в туман, Замков воздушных не носит земля, Кто-то ошибся, ты или я. -------------- Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым. |
||||||||
|
|||||||||
| Yanis |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 1 Всего: 111 |
Мне эта запись очень непонятна. Сам бы я до такого не додумался. Может объяснишь в чём тут суть? Операторы работают слева направо?
Так не пойдёт. Должно срабатывать только если число строго меньше или строго больше. Этот код срабатывает (возвращает i) даже если числа равны. |
||||
|
|||||
| kometa_triatlon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 384 Регистрация: 7.1.2005 Где: Киев Репутация: 2 Всего: 6 |
Насчет записи - забей, она мне сама непонятна
С чего ты взял? Извини меня, чтобы узнать, равны числа или нет, их нужно сравнить. Или у тебя есть сравнения двух сортов? -------------------- Всё очень просто: сказки обман, Солнечный остров скрылся в туман, Замков воздушных не носит земля, Кто-то ошибся, ты или я. -------------- Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым. |
|||
|
||||
| Yanis |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 1 Всего: 111 |
Конечно, может я и ошибаюсь, но запись:
возвращает k, если a[k] больше чем a[i], иначе возвращается i. Если чило a[k] == a[i], то это и есть тот случай - иначе (else). Или я не прав!? |
||||
|
|||||
| Alastis |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 251 Регистрация: 15.11.2004 Где: Казахстан, Астана Репутация: 4 Всего: 10 |
ты не ошибаешься, все именно так -------------------- Прости, что я говорю, когда ты меня перебиваешь. |
||||
|
|||||
| Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 1 Всего: 111 |
Значит ни у кого этот код и решение моей задачи не вызывает нареканий? Тогда буду доделывать дальше. Всем спасибо.
|
|||
|
||||
| Void |
|
||||||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
Три последовательных XOR над целыми числами эквивалентны их обмену. Но это некошерно и фактически является undefined behaviour. Читать обсуждение здесь: http://rsdn.ru/Forum/Message.aspx?mid=439731&only=1 Преподу расскажи обязательно Насчет красоты, по-моему, запись
рулит Это сообщение отредактировал(а) Void - 17.5.2005, 19:31 -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
||||||
|
|||||||
| Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 1 Всего: 111 |
To Void
Спасибо. Про undefined behaviour ничего не понял, потому что не умею пользоваться ихним форумом ;) Но из названия я вижу, что это типа "не объявленное поведение" или скорее "не предсказуемое поведение". |
|||
|
||||
| Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 1 Всего: 111 |
To Void
Спасибо. Про undefined behaviour ничего не понял, потому что не умею пользоваться ихним форумом ;) Но из названия я вижу, что это типа "не объявленное поведение" или скорее "не предсказуемое поведение". Это сообщение отредактировал(а) Yanis - 17.5.2005, 21:49 |
|||
|
||||
| kometa_triatlon |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 384 Регистрация: 7.1.2005 Где: Киев Репутация: 2 Всего: 6 |
Void
Как вызов функции может сработать быстрее? А насчет undefined, то у меня такого никогда не было. Если с его компилятором работает нормально, так почему бы и нет?
Вот елки... Действительно Просто я подумал, что это как обычно поиск максимального элемента, вот и сработал рефлекс Ну если продолжать тему, то правильно будет так:
И насчет количества сравнений: допустим два числа равны, проверяется первое условие (происходит сравнение), не срабатывает, потом второе (опять сравнение), опять не срабатывает. В итоге прошло два сравнения, а их счетчик не увеличился... -------------------- Всё очень просто: сказки обман, Солнечный остров скрылся в туман, Замков воздушных не носит земля, Кто-то ошибся, ты или я. -------------- Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым. |
||||
|
|||||
| Void |
|
||||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
Есть такое понятие, как inline-подстановка. И для такой простой функции, как std::swap она выполняется практически всегда. По ссылке все-таки стоит сходить - там приводили asm-листинги, во что скомплировался тот и другой вариант. Как и следовало ожидать, компилятор оказался умнее. Преждевременная оптимизация - корень всех бед
Ну что мы теперь, на конкретный компилятор будем завязываться? Зачем? Это действительно отработает как надо на большинстве компиляторов для целочисленных типов - но завтра понадобится сортировка для double или сложных объектов - что делать будем? -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
||||
|
|||||
| kometa_triatlon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 384 Регистрация: 7.1.2005 Где: Киев Репутация: 2 Всего: 6 |
Void
Ну насчет inline я не знал А насчет компилятора - это я к тому, что в данном случае ( для этого типа, на этом компиляторе ) можно спокойно использовать. Сомневаюсь, что это именно такой:
случай -------------------- Всё очень просто: сказки обман, Солнечный остров скрылся в туман, Замков воздушных не носит земля, Кто-то ошибся, ты или я. -------------- Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |