За десяток лет на форуме от Сфинкса есть лишь про многовариантность каких то невнятных разработок неких разделов, но без завязки на реальность проектов и реальность оплаты этих проектов( кроме странных перечислений на карточки кредитные) и полные трагизма проработки "как сократить траты при выплатах кредитов и прочих обязательных платежей". Скажите, ОВКТ, Лошаденок, Сфинкс и т.д.- вы пробовали просто работать и зарабатывать , что б без кредитов на жизнь хватало? Или вы на вертолет копите? Про простые житейские проблемы, типа купил квартиру трешку, родил двух детей, отдал в школу\ДДУ, замучался с авто этим, как сделать лучше комфорт в доме вы ни разу не писали за эти годы. Может вы себе завод построили втихоря и санкции амеров вам кислород со сбытом перекрыли, или еще что то такое нужное,хорошее , масштабное? Современники ваши должны ж знать, может эта напасть с кредитами ( ведь даже не ипотечка) не просто так, а весьма по делу и от решения серьезных глобальных задач у вас возникла, а мужики не знают.
Группа: Участники форума
Сообщений: 1812
Регистрация: 31.3.2015
Пользователь №: 263772
в данной теме лучше бы рассказали
какой язык программирования знают я например знаю qbasic & excel
и дальше не развиваюсь без задач хотя скачал решения одинаковых задач на разных языках программирования
quicksort qbasic быстрая сортировка половиной и МЫ
Код
n = 37 DIM d(2, n), sum(5), sred(5) RANDOMIZE TIMER
FOR i = 1 TO n d(1, i) = n - i + 1 PRINT d(1, i); NEXT: PRINT
start = TIMER: p = 0: s = 0
FOR i = 1 TO n: sum(1) = sum(1) + d(1, i) NEXT: sred(1) = sum(1) / n: PRINT sred(1):
y = 1: z = 0: FOR i = 1 TO n IF d(1, i) < sred(1) THEN d(2, y) = d(1, i): y = y + 1: ELSE d(2, n - z) = d(1, i): z = z + 1 NEXT
FOR i = 1 TO n: PRINT -d(2, i);: NEXT: PRINT FOR i = 1 TO n: sum(2) = sum(2) + d(2, i): NEXT sred(2) = sum(2) / n: PRINT sred(2): PRINT
FOR i = 1 TO n / 2: FOR j = i TO n / 2 IF d(2, i) > d(2, j) THEN x = d(2, i): d(2, i) = d(2, j): d(2, j) = x: p = p + 1 s = s + 1: NEXT: NEXT FOR i = n / 2 TO n: FOR j = i TO n IF d(2, i) > d(2, j) THEN x = d(2, i): d(2, i) = d(2, j): d(2, j) = x: p = p + 1 s = s + 1: NEXT: NEXT
FOR i = 1 TO n: sum(3) = sum(3) + d(2, i): NEXT: sred(3) = sum(3) / n: PRINT
finish = TIMER
FOR i = 1 TO n: PRINT d(2, i);: NEXT PRINT: PRINT sred(3): PRINT
PRINT finish - start, s, p END
в excel Возможно сортировать поместив в крайний левый столбец порядковые номера и сортируя область возрастая или убывая и легко перетасовывать готовые результаты поместив в крайний левый столбец случайные номера и сортируя область.
Сообщение отредактировал экспорт - 6.5.2018, 14:46
Группа: Участники форума
Сообщений: 1812
Регистрация: 31.3.2015
Пользователь №: 263772
сам экспериментально нашёл и исправил особенность типа если ввести большое значение в массив тогда средний окажется искажён и массив делится пополам неправильно
а оказалось решение встроено в виде счётчика количества элементов меньше среднего и работает причём без GОТО и значит классный код
1-вые непонятные циклы лишь заполнение массива специально худшими значениями и заодно 100ооо элементов сортировал за менее 120 секунд 1ооо сортирует за 0,05с за 274ооо проходов и 4600 перестановок
Код
n = 13 DIM d(2, n), sum(5), sred(5)
RANDOMIZE TIMER
FOR i = 1 TO INT(n / 2) d(1, i) = INT(RND * 20) + 5 PRINT i; "="; d(1, i); NEXT: PRINT
FOR i = INT(n / 2) + 1 TO n d(1, INT(i + 0.5)) = INT(RND * 10) + 1 PRINT INT(i + 0.5); "="; d(1, i); NEXT: PRINT: PRINT
FOR k = 1 TO n: PRINT d(1, k);: NEXT: PRINT
start = TIMER: p = 0: s = 0
FOR i = 1 TO n: sum(1) = sum(1) + d(1, i) NEXT: sred(1) = sum(1) / n: PRINT sred(1): PRINT
y = 1: z = 0: FOR i = 1 TO n IF d(1, i) < sred(1) THEN d(2, y) = d(1, i): y = y + 1: ELSE d(2, n - z) = d(1, i): z = z + 1 NEXT: PRINT
FOR i = 1 TO n: sum(2) = sum(2) + d(2, i): NEXT sred(2) = sum(2) / n: PRINT sred(2), y: PRINT
FOR i = 1 TO y - 1: FOR j = i TO y - 1 IF d(2, i) > d(2, j) THEN x = d(2, i): d(2, i) = d(2, j): d(2, j) = x: p = p + 1 s = s + 1: NEXT: NEXT
FOR i = y TO n: FOR j = i TO n IF d(2, i) > d(2, j) THEN x = d(2, i): d(2, i) = d(2, j): d(2, j) = x: p = p + 1 s = s + 1: NEXT: NEXT
FOR i = 1 TO n: sum(3) = sum(3) + d(2, i): NEXT: sred(3) = sum(3) / n: PRINT
finish = TIMER
FOR i = 1 TO n: PRINT d(2, i);: NEXT PRINT: PRINT sred(3)
Группа: Участники форума
Сообщений: 1812
Регистрация: 31.3.2015
Пользователь №: 263772
сортировка на одинаковых массивах
пузырьковая bubble = все со всеми: ошибочный массовый алгоритм из интернета школьная = улучшенная пузырьковая: различные элементы без перестановки равных
русская сортировка: школьная или выбором включая деление на 2 части включает цикл и переменные без индекса = улучшенная школьная и массив делится на 2 части и также улучшается сортировка выбором и другие человеческие нормальные понятные и возможно делить на 4 части и на 8 частей не усложняя понимание
Дано. Есть лекарство, которое нужно пропить курсом. Минимальный курс - 8 таблеток, максимальный - 10. Вопрос. По сколько таблеток в блистере будет продаваться это лекарство? a) 8 б) 10 в) 7
Группа: Участники форума
Сообщений: 6417
Регистрация: 31.1.2010
Из: г. Изобильный
Пользователь №: 45516
Цитата(инж323 @ 24.6.2018, 21:48)
правила честнойторговли
Дано. Есть лекарство, которое нужно пропить курсом. Минимальный курс - 8 таблеток, максимальный - 10. Вопрос. По сколько таблеток в блистере будет продаваться это лекарство? a) 8 б) 10 в) 7
Группа: Участники форума
Сообщений: 1812
Регистрация: 31.3.2015
Пользователь №: 263772
Моя Русская сортировка половинами включена в сборник 100 сортировок
... под названием ... Сортировка Таноса из кино Война Бесконечности Thanos sorting
Название единомышленник придумал и нормально
Если создаст тему на вопросы думаю отвечу но не зная читателей свою тему пока не создаю и если размещать то 1 таблицу и 1 программу делая упор на ускорение человеческих сортировок
Русская сортировка половинами или проще говоря: Средне-арифметическая сортировка интегралов
Группа: Участники форума
Сообщений: 1812
Регистрация: 31.3.2015
Пользователь №: 263772
За минувшее время создана ещё визуализация заинтересовавшая учителей информатики на западе и на востоке и без подсказок создают свои версии возможно на олимпиадах по информатике
Русская Сортировка Половинами Ускоряет Данилин
Russian Sort Halves Accelerate Danilin
Сообщение отредактировал экспорт - 12.9.2018, 18:56
Группа: Участники форума
Сообщений: 1812
Регистрация: 31.3.2015
Пользователь №: 263772
За минувшее лето разобрана программа единомышленника и создана улучшенная QB64 Qbasic рекурсивная Русская сортировка половинами Russian Sorting Halves
показывающая результаты: там где пузырьковая сортирует 100'ооо за 230 секунд там где пузырьковая половинами 100'ооо за 70 секунд
там Рекурсия Русская сортировка половинами за 0,33 секунды и миллион сортирует за 3,5 секунды именно в QB64 Qbasic повторяю: 1'000'ooo сортирует за 3,5 секунды в QB64 Qbasic
и приветствую версии на других языках программирования особенно где возможна визуализация и сравнение сортировок
Русская сортировка половинами важные действия визуализация Russian sorting halves important actions visualization
RussianSortingHalvesDAV: Excel рекурсия таблица AlgoLab только изменённая мной часть RussianSortingHalvesDAV исправлен ляп лишних вычислений среднего и без лишних переменных и без замедляющего оформления: сортирует максимум 250 ячеек за 10 секунд быстрее в 12 раз чем также ускоренная обычная сортировка
Код
'RussianSortingHalvesDAV Private Sub SortThanos() Dim LevelMax As Long With Sheets("process") .Activate LevelMax = 2 * Log(lngArrayCount) If LevelMax > 0 Then Call RussianSortingHalvesDAV(1, lngArrayCount, 1, LevelMax) End If End With End Sub Private Sub RussianSortingHalvesDAV(j1 As Long, j2 As Long, Level As Long, LevelMax As Long) Dim j As Long Dim Sum As Long Dim Average As Double Dim Left As Long Dim Right As Long Dim Column As Long Dim strAverage As String With Sheets("process") .Activate If j2 - j1 < 1 Then Exit Sub End If For j = j1 To j2 Sum = Sum + .Cells(1, j) Next Average = Sum / (j2 - j1 + 1) Left = j1 - 1 Right = j2 + 1 For j = j1 To j2 If .Cells(1, j) <= Average Then Left = Left + 1 Column = Left Else Right = Right - 1 Column = Right End If .Cells(7, Column) = .Cells(1, j) .Cells(1, j) = "" Next For j = j1 To j2 .Cells(1, j) = .Cells(7, j) .Cells(7, j) = "" Next .Rows("7:8").Delete If Level < LevelMax Then If Left >= j1 Then Call RussianSortingHalvesDAV(j1, Left, Level + 1, LevelMax) If Right <= j2 Then Call RussianSortingHalvesDAV(Right, j2, Level + 1, LevelMax) End If End With End Sub
DECLARE SUB RussianSortingHalvesDAV (j1!, j2!, Level!, LevelMax!) CLOSE: OPEN "c:/N.txt" FOR INPUT AS #5 INPUT #5, n: PRINT n
DIM SHARED d(2, n) AS LONG
OPEN "c:/ISX.txt" FOR INPUT AS #1 FOR i = 1 TO n: INPUT #1, d(1, i): NEXT
IF n < 17 THEN FOR k = 1 TO n: PRINT d(1, k);: NEXT: PRINT IF n > 16 THEN FOR k = n - 10 TO n: PRINT d(1, k);: NEXT: PRINT
start = TIMER
LevelMax = 2 * LOG(n) PRINT n, LevelMax
IF LevelMax > 0 THEN CALL RussianSortingHalvesDAV(1, n, 1, LevelMax) END IF
finish = TIMER
IF n < 17 THEN FOR k = 1 TO n: PRINT d(1, k);: NEXT: PRINT IF n > 16 THEN FOR k = n - 10 TO n: PRINT d(1, k);: NEXT: PRINT
PRINT finish - start
OPEN "c:/=RuSortHalves_dav.txt" FOR OUTPUT AS #2 PRINT #2, finish - start; "sekung " PRINT #2, n; "el", "RECURSION" FOR i = 1 TO n: PRINT #2, d(1, i): NEXT
END
SUB RussianSortingHalvesDAV (j1, j2, Level, LevelMax)
IF j2 - j1 < 1 THEN EXIT SUB
FOR j = j1 TO j2 Sum = Sum + d(1, j) NEXT Average = Sum / (j2 - j1 + 1)
Levo = j1 - 1 Prav = j2 + 1
FOR j = j1 TO j2 IF d(1, j) < Average THEN Levo = Levo + 1 Column = Levo ELSE Prav = Prav - 1 Column = Prav END IF
d(2, Column) = d(1, j) NEXT
FOR j = j1 TO j2 d(1, j) = d(2, j): NEXT
IF Level < LevelMax THEN IF Levo >= j1 THEN CALL RussianSortingHalvesDAV(j1, Levo, Level + 1, LevelMax) IF Prav <= j2 THEN CALL RussianSortingHalvesDAV(Prav, j2, Level + 1, LevelMax) END IF
Группа: Участники форума
Сообщений: 1812
Регистрация: 31.3.2015
Пользователь №: 263772
ускоряющее развитие: вместо 2-мерного массива 2 массива d(N) и a(N) и действительно успешно: сортирует 100ооо за 0,22 секунды
сортирует 1000ооо за 2,2 секунды сортирует миллион за 2,2 секунды sorts 1'000'000 in 2.2 seconds сортирует 1'000'000 за 2,2 секунды
Код
' Russian Sorting Halves Danilin
DECLARE SUB RussianSortingHalvesDAV (Lev!, Prv!, Zikl!, Nauka!) CLOSE OPEN "c:/N.txt" FOR INPUT AS #5 INPUT #5, n: PRINT n
'n=1000000
Nauka=1+LOG(n)/LOG(2) PRINT n, Nauka
DIM SHARED d(n) 'AS LONG DIM SHARED a(n) 'AS LONG
'OPEN "c:/ISX.txt" FOR INPUT AS #1 'FOR i=1 TO n: INPUT #1, d(i): NEXT
FOR i=1 TO n: d(i)=n-i+1: NEXT ' INT(RND * n)
IF n < 17 THEN FOR k=1 TO n: PRINT d(k);: NEXT: PRINT IF n > 16 THEN FOR k=n-8 TO n: PRINT d(k);: NEXT: PRINT
start=TIMER
IF Nauka > 0 THEN CALL RussianSortingHalvesDAV(1, n, 1, Nauka) END IF
finish=TIMER
IF n < 17 THEN FOR k=1 TO n: PRINT d(k);: NEXT: PRINT IF n > 16 THEN FOR k=n-8 TO n: PRINT d(k);: NEXT: PRINT
PRINT finish-start
'OPEN "c:/=RuSortHalves_dav.txt" FOR OUTPUT AS #2 'PRINT #2, finish-start; "sekund " 'PRINT #2, n; "elements", "RECURSION" 'FOR i=1 TO n: PRINT #2, d(i): NEXT
END
SUB RussianSortingHalvesDAV (Lev, Prv, Zikl, Nauka)
IF Prv-Lev < 1 THEN EXIT SUB
FOR i=Lev TO Prv Summ=Summ+d(i) NEXT Sred=Summ/(Prv-Lev+1)
Levo=Lev-1 Prav=Prv+1
FOR i=Lev TO Prv IF d(i) < Sred THEN Levo=Levo+1: Mesto=Levo: ELSE Prav=Prav-1: Mesto=Prav a(Mesto)=d(i) NEXT
FOR i=Lev TO Prv: d(i)=a(i): NEXT
IF Zikl < Nauka THEN IF Levo >= Lev THEN CALL RussianSortingHalvesDAV(Lev, Levo, Zikl+1, Nauka) IF Prav <= Prv THEN CALL RussianSortingHalvesDAV(Prav, Prv, Zikl+1, Nauka) END IF