- 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
#include <iostream>
#include <vector>
#include <stdlib.h>
#include <time.h>
using std::vector;
void print_vec(const vector<int> v)
{ /* Print Vector */
for(vector<int>::size_type i(0); i!=v.size(); ++i)
std::cout << v[i] << (i!=v.size()-1 ? "|":"\n");
}
bool sort_vec(const vector<int> v)
{ /* Return True if vector sorted */
bool b(true);
for(vector<int>::size_type i(v.size()-1);i!=0;--i)
if (v[i]<v[i-1]) {b=false;}
return b;
}
int main()
{
vector<int> VectorForNumber;
const unsigned int ConstMaxElement(10);
srand(time(NULL));
for(vector<int>::size_type i(0);i!=ConstMaxElement;++i)
VectorForNumber.push_back(rand() % 50); // Max Number. Unsigned int && 0<N!
while (not sort_vec(VectorForNumber))
{
print_vec(VectorForNumber);
std::swap(VectorForNumber[rand() % ConstMaxElement],VectorForNumber[rand() % ConstMaxElement]);
}
print_vec(VectorForNumber);
return 0;
}
Менять местами два элемента вектора до тех пор, пока он не станет отсортированным по возрастанию.
С выводом сортирует примерно за 30 секунд вектор из 10 элементов, без вывода - от 0.5-1 секунды.
govnomonad 06.04.2013 05:34 # 0
LispGovno 06.04.2013 07:13 # +2
inkanus-gray 06.04.2013 12:19 # +1
eli 06.04.2013 12:22 # 0
Почему "мало"? Потому что в итоге все ровно рано или поздно вектор отсортирован.
inkanus-gray 06.04.2013 12:31 # +1
eli 06.04.2013 12:39 # 0
inkanus-gray 06.04.2013 12:45 # +1
Кстати, у всех алгоритмов генерации псевдослучайных чисел есть цикл: число на шаге (n+m) может совпасть с числом на шаге n, тогда цепочка чисел от n-ного до (n+m)-ного будет повторяться вечно.
TarasB 06.04.2013 13:35 # +2
Yuuri 08.04.2013 11:27 # 0
bormand 06.04.2013 09:52 # +1
Там всего 3628800 вариантов. А вот вектора из 20 элементов уже не дождешься ;)
inkanus-gray 06.04.2013 12:17 # 0
eli 06.04.2013 12:21 # 0
inkanus-gray 06.04.2013 12:30 # +1
Человеку очевидно, что для сортировки достаточно переставить два последних элемента. Продемонстрированному алгоритму — нет. Он сначала размешает все предыдущие элементы, а потом, когда-нибудь в далёком будущем, отсортирует вектор, если звёзды будут благосклонны.
eli 06.04.2013 12:38 # −1
blackhearted 08.04.2013 18:56 # 0
eli 06.04.2013 10:13 # −4
Перемешивать массив до тех пор, пока он не будет отсортирован. Немного упрощаем до перемешивания двух случайных элементов и смотрим как от будет сортировать.
Эм... Это не лаба, а просто шуточные код.
Почему же, подождать можно, просто будет долго считать, особенно если не убирать вывод.
:)
inkanus-gray 06.04.2013 12:20 # +1
defecate-plusplus 06.04.2013 12:32 # +7
inkanus-gray 06.04.2013 13:10 # +2
TarasB 06.04.2013 13:33 # −3
ну не лень, а
я б все векторы на int переточил, ибо int писать быстрее, чем size_t
А те, кому надо больше 2 млрд элементов - да ну их нахуй!
LispGovno 06.04.2013 16:16 # +1
64-bit addressing mode
TarasB 06.04.2013 16:59 # +1
bormand 06.04.2013 17:02 # 0
Юзай жабу. Там так и есть.
3.14159265 06.04.2013 17:08 # +3
Ну как тебе сказать. С первой частью поста (про лень) я согласен, со второй не совсем.
Вот запили свой TVector. И напиши в документации:
>кому надо больше 2 млрд элементов - да ну их нахуй!
TarasB 06.04.2013 19:50 # +2
3.14159265 06.04.2013 20:07 # +3
А все кому надо больше - пусть пилят косвенную адресацию.
И в это время думают - надо ли им одним куском памяти такие вещи. Или всё-таки надо делать страничную адресацию.
Вернее даже так. Я полностью с тобой согласен в вопросе размера цельного массива, но не согласен в вопросах интерфейса для доступа к вектору - тут нельзя ничего ограничивать.
inkanus-gray 06.04.2013 22:07 # +2
LispGovno 06.04.2013 22:16 # 0
TarasB 08.04.2013 11:41 # 0
defecate-plusplus 08.04.2013 11:45 # +5
TarasB 08.04.2013 11:56 # −3
roman-kashitsyn 08.04.2013 11:58 # +4
TarasB 08.04.2013 12:09 # −2
LispGovno 08.04.2013 12:44 # 0
bormand 08.04.2013 12:26 # +3
P.S. l - 64 бита знаковое, q - 64 беззнаковое (quad word) и так далее по уменьшению.
roman-kashitsyn 08.04.2013 12:36 # +4
TarasB 08.04.2013 13:18 # −3
Вообще я что хочу сказать.
В одном сишкоблядском языке явно экономили на названиях типов и функций, в ущерб остальному, поэтому чтоб на нём ещё и типы писать длинными словами - ну нахуй.
А в другом (нормальном) языке тупой экономией не занимались, и на нём, кстати, длинные названия смотрятся нормально.
bormand 08.04.2013 14:54 # +1
unsigned long long. Неплохо так наэкономили...
TarasB 08.04.2013 15:02 # −3
3.14159265 08.04.2013 16:33 # 0
А в бейсиках по последней!
eth0 08.04.2013 18:24 # 0
TarasB 06.04.2013 13:39 # −1
> not
guest 06.04.2013 14:34 # −2
http://ideone.com/SWN5rB
defecate-plusplus 06.04.2013 14:59 # +4
стандарт
2.6 Alternative tokens [lex.digraph]
wvxvw 06.04.2013 15:09 # −1
defecate-plusplus 06.04.2013 15:14 # +4
begin/end можно запилить через #define
нечувствительно к регистру - не сталкивался с такими опциями ни в одном компиляторе, и думаю, их не существует
имя функции без скобок имеет семантику адреса этой функции
guest 06.04.2013 19:05 # +3
и правильно, такое надо делать через препроцессор
LispGovno 06.04.2013 16:17 # +3
Lure Of Chaos 07.04.2013 04:09 # +5
алгоритм универсален, т.к. позволяет задать не только требование упорядоченности, но и самый сумасшедший.
вот на закуску бонусный псевдокод:
сложность алгоритма O(NaN)
scriptin 07.04.2013 14:22 # +3
inkanus-gray 07.04.2013 18:34 # 0
scriptin 07.04.2013 19:03 # 0
inkanus-gray 07.04.2013 21:05 # 0
Lure Of Chaos 07.04.2013 21:15 # +2
и, кстати, O(1), а не O(0)
scriptin 07.04.2013 23:10 # 0
Lure Of Chaos 07.04.2013 21:17 # 0
1. найдите еще один изъян в этом коде (как функции, а не как алгоритма)
2. ответьте, нужно ли его исправлять
bormand 07.04.2013 22:09 # 0
Если это жаба, и функции не передали один и тот же массив в оба аргумента, то цикл будет вечным.
Если это кресты, то при достаточно хорошем ГСЧ и терпении все норм, особыъ изъянов не вижу.
roman-kashitsyn 07.04.2013 22:41 # +1