- 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
//---сортировка по возрастанию методом выбора отдельно реальной и мнимой составляющих---------------
bool F_Sorted(T_VectorComplex * VC, bool)
{
int i, j, m, N;
double z;
N = (*VC).size();
for (j = N - 1; j > 0; j--) {
m = j;
z = real((*VC)[j]);
for (i = j - 1; i >= 0; i--)
if (z < real((*VC)[i])) {
z = real((*VC)[i]);
m = i;
}
if (j != m) {
(*VC)[m] = T_Complex(real((*VC)[j]), imag((*VC)[m]));
(*VC)[j] = T_Complex(z, imag((*VC)[j]));
}
}
for (j = N - 1; j > 0; j--) {
m = j;
z = imag((*VC)[j]);
for (i = j - 1; i >= 0; i--)
if (z < imag((*VC)[i])) {
z = imag((*VC)[i]);
m = i;
}
if (j != m) {
(*VC)[m] = T_Complex(real((*VC)[m]), imag((*VC)[j]));
(*VC)[j] = T_Complex(real((*VC)[j]), z);
}
}
return (true);
}
guest 11.03.2010 15:39 # +0.2
zabulus 11.03.2010 17:19 # +2
xaionaro 12.03.2010 16:10 # −1
Хотя с другой стороны, возможно что это наоборот функция с "backward compatibility" на замену какой-то другой (более ранней) функции.
А если ближе к телу функции, то вглядываться лень, но сразу режет глаз постоянное "(*VC)". Правильнее было бы определить ещё одну переменную, которой один раз присвоить "(*VC)", и после этого везде работать с новой переменной. Спросите "почему", дак для того, чтобы уменьшить глубину реальных значений (чтобы рабоатть не поинтером из поинтера, а напрямую с поинтером)... ну и так же из эстетических соображений
linux-hacker 12.03.2010 21:55 # +2.2
Если присвоить (*VC) переменной, то произойдёт глубокое копирование всего вектора. А вообще в С/C++ есть такой оператор как ->, а ещё лучше использовать ссылку или итераторы. А ещё лучше не городить велосипеды и использовать std::sort (которая, сортирует О(n log(n)) против О(N^2) в вышеприведённом говнокоде) и сортировка контейнера выполняется банальным определением предиката для комплексных чисел, например вот так:
Ниже приведён полный текст проверочная программа, советую не полениться, а почитать ;)
guest 13.03.2010 02:21 # −1
linux-hacker 13.03.2010 21:13 # 0
guest 13.03.2010 18:41 # 0
linux-hacker 13.03.2010 21:14 # +2.6
guest 15.03.2010 11:58 # −0.8
Barmaglot 15.03.2010 12:52 # +3
Лаконичный, предельно ясный код. +
Хорошее зеркало говнокода.
guest 15.03.2010 18:48 # 0
Barmaglot 15.03.2010 19:10 # +2.8
http://govnokod.ru/2752#comment18043 - не говнокод
:-)
guest 15.03.2010 19:46 # −2.8
guest 15.03.2010 19:46 # −0.2
linux-hacker 15.03.2010 23:35 # 0
linux-hacker 15.03.2010 23:34 # +2
guest 15.03.2010 18:50 # −2
linux-hacker 15.03.2010 23:31 # 0
guest 30.03.2010 00:04 # +3
guest 15.03.2010 18:54 # −1
Нужно rand()/RAND_MAX * maxololol использовать.
linux-hacker 15.03.2010 23:25 # +1
guest 15.03.2010 18:56 # 0
using namespace std; не дано использовать?
linux-hacker 15.03.2010 23:27 # 0
guest 13.03.2010 18:36 # 0
Даже в случае ошибки. :P
guest 13.03.2010 18:43 # −1
linux-hacker 13.03.2010 21:15 # 0
guest 15.03.2010 18:48 # −1
linux-hacker 15.03.2010 23:29 # +1
guest 15.03.2010 18:59 # +3.2
Сигнализирующие о том, что отсортировать элементы не удалось? :D
Что-за бред?
linux-hacker 15.03.2010 23:28 # +2
guest 30.03.2010 00:06 # −1
crox 01.04.2010 13:19 # 0
T_VectorComplex - это std::vector<std::complex<double> >
T_Complex - это std::complex<double>
real, imag и прочие...
но это конечно не умоляет заслуг автора ...))