
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.14.86] |
![]() |
|
Сообщ.
#1
,
|
|
|
Дано описание
![]() ![]() Point=record x,y:integer; end; a1,b1,c1:point; a,b,c:point; Так вот мне нужен наибыстрейший код сортировки точек a1, b1, c1 так чтобы в A оказалась точка с минимальным значением Y, в C с максимальным значением, а в B со средним значением Y. |
Сообщ.
#2
,
|
|
|
Хе!
![]() Попробуй так (не проверено, но д.б. правильно): ![]() ![]() If (A1.Y <= B1.Y) and (A1.Y <= C1.Y) then Begin A := A1; If B1.Y <= C1.Y then Begin B := B1; C := C1 End else Begin B := C1; C := B1 End End else If (B1.Y <= C1.Y) and (B1.Y <= A1.Y) then Begin A := B1; If C1.Y <= A1.Y then Begin B := C1; C := A1 End else Begin B := A1; C := C1 End End else {If (C1.Y <= A1.Y) and (C1.Y <= B1.Y) then} Begin A := C1; If A1.Y <= B1.Y then Begin B := A1; C := B1 End else Begin B := B1; C := A1 End End |
Сообщ.
#3
,
|
|
|
А я бы предложил такой вариант: маленький метод пузырька:
![]() ![]() type Point=record x,y:integer; end; var a1,b1,c1:point; a,b,c,temp:point; begin ................... a:=a1; b:=b1; c:=c1; if a.y>b.y then begin temp:=a; a:=b; b:=temp; end; if b.y>c.y then begin temp:=b; b:=c; c:=temp; end; if a.y>b.y then begin temp:=a; a:=b; b:=temp; end; ................... end. |
Сообщ.
#4
,
|
|
|
Возьму на себя смелость дать анализ этих двух программ.
Первая, в зависимости от расклада, сравнивает от 3 до 5 раз, 3 раза присваивает и 1 или 2 раза логически умножает. Вторая сравнивает 3 раза и присваивает(опять же в зависимости от расклада) от 3 до 12 раз Если человеку нужен самый быстрый код, то вот в этой программе 3(или даже 2) сравнения и 3 присвоения при любых значениях. . . . . . . . . . . . . . if a1.y<b1.y then if c1.y<b1.y then if c1.y<a1.y then begin a:=c1; b:=a1; c:=b1 end else begin a:=a1; b:=c1; c:=b1 end else begin a:=a1; b:=b1; c:=c1 end else if c1.y<a1.y then if c1.y<b1.y then begin a:=c1; b:=b1; c:=a1 end else begin a:=b1; b:=c1; c:=a1 end else begin a:=b1; b:=a1; c:=c1 end; . . . . . . . . . . . . . |
Сообщ.
#5
,
|
|
|
Пасиба!
|