Сортировка в GWBASIC
Я работаю с GWBASIC, но не могу найти простой способ сортировки (числа). У меня есть только 4 числа для работы (диапазон 150-200). После некоторых вычислений я получаю эти 4 числа, и мне нужно отсортировать их в порядке возрастания, чтобы перейдите к следующему шагу. Прямо сейчас я делаю это вручную, глядя на вывод на экране, и ищу наименьшее число и набираю его в порядке возрастания. Много потерянного времени, не говоря уже о нагрузке на глаза! Я искал все формулы, но не смог найти подходящую для меня. Вот как это выглядит: SM1 = 121.50 SM2 = 123,65 SM3 = 117.80 SM4 = 119.50 Новые значения заказа должны быть: XS1 = 117.80 XS2 = 119.50 XS3 = 121.50 XS4 = 123.65
Мне не нужно это печатать или видеть на экране, оно должно перейти к следующему этапу программы. Я был бы очень благодарен за очень простой процесс, чтобы я мог внести свой вклад в мою программу BASIC. Спасибо!
2 ответа
Первое решение действительно только для 4 номеров.
A=SM1 : B=SM2 : C=SM3 : D=SM4
If B<A Then Swap A,B
If C<A Then Swap A,C : Swap B,C Else If C<B Then Swap B,C
If D<A Then Swap A,D : Swap B,D : Swap C,D Else If D<B Then Swap B,D : Swap C,D Else If D<C Then Swap C,D
XS1=A : XS2=B : XS3=C : XS4=D
Второе решение с использованием массива. Это можно легко адаптировать для сортировки большего числа номеров.
Dim A(3) : A(0)=SM1 : A(1)=SM2 : A(2)=SM3 : A(3)=SM4
For J%=1 To 3 : REM *** 3 is one less than the number of values
A=A(J%)
For I%=0 To J%-1
If A<A(I%) Then While I%<J% : Swap A,A(I%) : I%=I%+1 : Wend : A(I%)=A
Next
Next
XS1=A(0) : XS2=A(1) : XS3=A(2) : XS4=A(3)
Я думаю, что вы можете использовать простую пузырьковую сортировку в массиве.
10 Dim a(3)
20 a(0)=121.50
30 a(1)=123.65
40 a(2)=117.80
50 a(3)=119.50
60 For L1 = 0 to 2
70 For L2 =L1+1 to 3
80 If a(L1)>a(L2) then swap a(L1), a(L2)
90 Next L2
100 Next L1
110 For n = 0 to 3
120 print a(n)
130 Next n
140 End
Просто используйте логику, если согласны