![]() |
![]() |
Altair |
![]()
Сообщение
#1
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Быстрые циклы.
Всего тестировалось 4 конструкции:
Проведение теста: сортировка массива (array[1..20] of integer) методом пузырька. Всего было проведено 30 тестов : 10 c n= 10^4; 10 c n= 10^5; 10 c n= 10^6; и один тест с n=10^7 (один, т.к. с увеличением степени n на 1, время проведения теста увеличивается соответственно в 10 раз) Результат: Во всех случаях (каждый тест - новый массив) самой быстрой конструкцией оказалась "While ... do...", следом за ней "If ... then Goto..." Прикрепленные файлы ![]() -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Обмен значений в переменных.
Для увеличения скорости работы программы при обмене значениями двух чисел a и b вместо конструкции Код {1} a := a + b; b := a - b; a := a - b; или конструкции Код {2} a := a xor b; b := a xor b; a := a xor b; желательно использовать буферную переменную: Код {3} T := a; a := b; b := T; Тестируем скорость выполнения операции обмена: Код const n = 25000; var tm, tm1: longint; i, j: longint; a, b, T: word; begin writeln('n = ', n, ' * ', n); a := 1; b := 12; {----- With plus/minus -----} tm1:= MemL[$0040:$006c]; for i := 1 to n do for j := 1 to n do begin a := a + b; b := a - b; a := a - b; end; tm:= MemL[$0040:$006c]; tm:=tm-tm1; writeln('#1: ',tm); a := 1; b := 12; {----- With xor -----} tm1:= MemL[$0040:$006c]; for i := 1 to n do for j := 1 to n do begin a := a xor b; b := a xor b; a := a xor b; end; tm:= MemL[$0040:$006c]; tm:=tm-tm1; writeln('#2: ',tm); a := 1; b := 12; {----- With T -----} tm1:= MemL[$0040:$006c]; for i := 1 to n do for j := 1 to n do begin t := a; a := b; b := t; end; tm:= MemL[$0040:$006c]; tm:=tm-tm1; writeln('#3: ',tm); end. Результаты тестирования: Цитата n = 10000 * 10000 (100,000,000 обменов) #1: 29 #2: 29 #3: 15 n = 12000 * 12000 (144,000,000 обменов) #1: 41 #2: 42 #3: 22 n = 15000 * 15000 (225,000,000 обменов) #1: 64 #2: 65 #3: 38 n = 25000 * 25000 (625,000,000 обменов) #1: 182 #2: 180 #3: 98 n = 45000 * 45000 (2,025,000,000 обменов) #1: 584 #2: 574 #3: 318 |
![]() ![]() |
![]() |
Текстовая версия | 14.08.2025 14:57 |