- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
#include <cstdlib>
#include <iostream>
#include <time.h>
using namespace std;
const int n=20;
int mass[20];
void massiv(int x[])
{
srand(time(NULL));
for(int i=0;i<20;i++) mass[i]=rand()%100;
return 0;
}
void vivod(int x[])
{
for(int i=0;i<20;i++) cout<<mas[i]<<"\n";
return 0;
}
void sort (int x[])
{
int i,j,b;
for(j=1;j<=n-1;j++)
for(i=0;i<=n-1-j;i++)
if (mass[i]>mass[i+1])
{
b=mass[i];
mass[i]=mass[i+1];
mass[i+1]=b;
}
}
return 0;
}
int main(int argc, char *argv[])
{
zapolneniemassiva(mass[20]);
pokaz(mass[20]);
sort(mass[20]);
variant3(mass[20]);
system("PAUSE");
return EXIT_SUCCESS;
}
Одногруппник сделал лабу на C++, программа сортирует массив по возрастанию и выводит, ну, по крайней мере, должна.
P.S. Очень странно, но сама пузырьковая сортировка походу написана корректно.
Плюс пузырьковой сортировки в том, что она сортирует быстро почти отсортированные коллекции.
Так что не хватает теста на отсортированность и выхода из очередной итерации, если это произошло.
Хотя конечно использовать её для почти отсортированных коллекций не имеет смысла, так как есть более хорошие алгоритмы
Скажи спасибо, что автор "лабы" хотя бы с индексами не пролетел, и оно с горем-попалам, хоть и медленно, и совсем не тот массив, который ей передали в аргументе, но все-таки будет сортировать... Какая уж тут эффективность...
А вот остальной код - скучная, унылая, некомпилирующаяся хуита:
1) return 0 в void'ах
2) совершенно левые имена функций в main()
3) каст из инта в указатель в sort(mass[20])
4) mass и mas
докатились
Нижние 3 строки показывают требования к входным и выходным параметрам, а также запоротые во вставке регистры.
Я тоже про макросы подумал.
>или "+ и -" же
Вот такие как ты и писали в жабе усреднение для binarySearch.
Выбиралось для сортировки (a+b)/2. В знаковой жабе.
В тех же крестах последствия были бы куда веселее...
Начала и конца исследуемого блока же. Вспоминай как работает двоичный поиск.
Вот если искомый элемент лежит практически в конце, а массив содержит чуть больше миллиарда элементов, то a+b переполнятся и их сумма станет отрицательной...
Блин, я бы пролетел... А как делать правильно?
ШиндовсХовно
Конечно же
(a+b)>>1
Хотя думаю можно ещё улучшить ситуацию
a+(abs(a-b)/2)
a + (b-a) / 2
Модуль здесь не нужен, т.к. при двоичном поиске всегда понятно, где верхняя граница, а где нижняя.
> (a+b)>>1
(a+b) >>> 1
> (a+b) >>> 1
> >>>
Что это?
>> это жабий sar
>>> это жабий shr
Это не роллы. Это шифты же.
Один растягивает знаковый бит, и юзается для знаковых чисел. Второй вдвигает нолики, поэтому эмулирует сдвиг на беззнаковых числах.
Ебанись. Арифметический (a) сдвиг (s) вправо (r) же.
А это аргумент. Борми, помоему ты переугорел с поцанами с улицы.
твой вариант обломается, если a дохуя отрицательное, b дохуя положительное
Это задача о двоичном поиске в массиве. Откуда там отрицательные числа?
Пасцализм ;)
А не дядю Вирта случаем? ;) Паскаль программированием не особо увлекался.
Здрисни.
Пиздец. Та грех такое минуснуть.
>Обмен посредством "xor" или "+ и -" же.
Что еще можно было ожидать от автора такого поста?
Кстати ни одного вменямого варианта по треду я не увидел.
(a+b) >>> 1 чем не вменяем?
За обилием absов не заметил лишнего ">".
Да и вообще я думал над "универсальным" вариантом.
Без жабизма головного мозга, чтоб уж везде.
(x & y) + ((x^y)>>1)
Должно по идее работать и на знаковых и на беззнаковых.
Вот битоебство то... частичные суммы и переносы разделены на 2 слагаемых, и сдвинуты по-отдельности...
Будь-то отрицательные, положительные, кресты, сишка, жаба, signed, unsigned.
Железно.
Не пойму другого - зачем вообще было тратить бисер и начинать что-то объяснять гумну?
Пусть бы дальше absы делал.
Чтобы накалить обстановку и написать Ебанись. Арифметический (a) сдвиг (s) вправо (r) же.
Ну и что тебе не понравилось? Абс спугался?
a=6;
b=0;
6+(6/2)=9
Q.E.D
О чем можно спорить с человеком который не знает (не способен нагуглить) что означает какой сдвиг?
> b=0;
Ну все-таки в рассматриваемой задаче предполагается, что a <= b. Но тогда и abs не нужен, достаточно тупо a+(b-a)/2.
Но не хотелось пугать наших крестодрузей всякими >>>. Жабисты не поймут про unsigned.
(x+y)>>>1
x=-1;y=-1;
Тоже работать не будет. Ну по-крайней мере хорошо на положительных - не так как у гумна. Ну он вообще дятел - потратил 4 инструкции, а пользы - никакой.
Потому ни одного по-настоящему хорошего варианта усреднения джвух чисел в треде я не увидел.
x/2 + y/2 + (x & y & 1)
Если не туплю - должно работать на всем диапазоне и в любом порядке.
Ан нет. Багует на -5 и 5 например.
(ну помимо полного абсурда: передавать туда разные типы unsigned и signed чтоб оно неправильно сдвинуло)
Нет. Пока не находится.
>int y = 251658240;
http://ideone.com/ovOHf3
Не ломается.
Ну кстати язык не только жаба.
Поделитесь секретом бессмертия?
P.S. На сишных int16_t потестил, все сочетания нормально проходят.
Лол, а толку? Это ж логика.
Тут голова главное - найти крайний случай где не работает, а не беспощадный, бессмысленный и вечный брутфорс по диапазону 10^18.
явка провалена
Ассемблер выглядывает из этого кода ;)
А ещё вместо переменных используй регистры.
Они пытаются писать "умный" код, а выходит говно.
И?
А для знаковых чисел на подавляющем большинстве платформ, где для представления отрицательных чисел используется дополнение до 2, сложение и вычитание отлично скомпенсируются т.к. на данных платформах для add и sub нет никаких различий между signed и unsigned.
P.S. Это, конечно, не отменяет того факта, что сам способ - говно. Хоть с ^ хоть c +/-.
По-моему, если известно заранее, что код пишется для винды, не грех заюзать getch() из conio.h.
Консольную прогу предполагается юзать из консоли, а консоль никуда не пропадает после выхода программы, поэтому задержка там нафиг не сдалась.
ХХХГовно
ШиндовсГовно
Знатный тролль
Пиздить изволите?