Data update

This commit is contained in:
Ingy döt Net 2024-10-16 18:07:41 -07:00
parent 81fd053722
commit 52a6ef48dd
10248 changed files with 63654 additions and 6775 deletions

View file

@ -1,16 +1,3 @@
mergesort=: {{
if. 2>#y do. y return.end.
middle=. <.-:#y
X=. mergesort middle{.y
Y=. mergesort middle}.y
X merge Y
}}
merge=: {{ r=. y#~ i=. j=. 0
while. (i<#x)*(j<#y) do. a=. i{x [b=. j{y
if. a<b do. r=. r,a [i=. i+1
else. r=. r,b [j=. j+1 end.
end.
if. i<#x do. r=. r, i}.x end.
if. j<#y do. r=. r, j}.y end.
}}
rec =. {.@] , }.@] $: [
merge =. rec f.~`(rec f.)@.(>&:{.)`]`[@.((+ 2&*)&(0 = #))
mergesort=. (<.@-:@# ({. merge&$: }.) ])^:(1 < #)

View file

@ -1,5 +1,2 @@
mergesort=: {{ r=. y [ stride=. 1
while. stride < #r do. stride=. 2*mid=. stride
r=. ;(-stride) (mid&}. <@merge (mid<.#) {.])\ r
end.
}}
mergesort 18 2 8 1 5 14 9 19 11 13 16 0 3 10 17 15 12 4 7 6
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

View file

@ -1,2 +1,16 @@
mergesort 18 2 8 1 5 14 9 19 11 13 16 0 3 10 17 15 12 4 7 6
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
mergesort=: {{
if. 2>#y do. y return.end.
middle=. <.-:#y
X=. mergesort middle{.y
Y=. mergesort middle}.y
X merge Y
}}
merge=: {{ r=. y#~ i=. j=. 0
while. (i<#x)*(j<#y) do. a=. i{x [b=. j{y
if. a<b do. r=. r,a [i=. i+1
else. r=. r,b [j=. j+1 end.
end.
if. i<#x do. r=. r, i}.x end.
if. j<#y do. r=. r, j}.y end.
}}

View file

@ -1,2 +1,5 @@
(/:~ -: mergesort) ?~?10000
1
mergesort=: {{ r=. y [ stride=. 1
while. stride < #r do. stride=. 2*mid=. stride
r=. ;(-stride) (mid&}. <@merge (mid<.#) {.])\ r
end.
}}

View file

@ -1,3 +1,2 @@
case=. (0 = # x=. @:[) + 2 * (0 = # y=. @:])
merge=. ({.x , }.x $: ])`(({.y , }.y $: [))@.({.x > {.y)`]`[@.case
mergesort=. (<. o -: o # ($: o {. merge $: (o=. @:) }.) ]) ^:(1 < #)
mergesort 18 2 8 1 5 14 9 19 11 13 16 0 3 10 17 15 12 4 7 6
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

View file

@ -1,2 +1,2 @@
mergesort 18 2 8 1 5 14 9 19 11 13 16 0 3 10 17 15 12 4 7 6
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
(/:~ -: mergesort) ?~?10000
1

View file

@ -0,0 +1,67 @@
Main:
call Generate
call Show
call Mergesort 1,n
call Show
exit
Generate:
call Random,,12345
n = 10
do i = 1 to n
stem.i = Random()
end
stem.0 = n
return
Show:
do i = 1 to n
say right(i,2) right(stem.i,3)
end
say
return
Mergesort:
procedure expose stem. work.
arg b,e
if e-b < 1 then
return
if e-b = 1 then do
if stem.b > stem.e then do
t = stem.b; stem.b = stem.e; stem.e = t
end
return
end
m = (b+e)%2
call Mergesort b,m
call Mergesort m+1,e
call Merger b,m,e
return
Merger:
procedure expose stem. work.
arg b,m,e
i = b; j = m+1; k = b
do while i <= m | j <= e
select
when i <= m & j <= e then do
if stem.i <= stem.j then do
work.k = stem.i; i = i+1
end
else do
work.k = stem.j; j = j+1
end
k = k+1
end
when i<=m then do
work.k = stem.i; i = i+1; k = k+1
end
otherwise do
work.k = stem.j; j = j+1; k = k+1
end
end
end
do i = b to e
stem.i = work.i
end
return