Data update
This commit is contained in:
parent
81fd053722
commit
52a6ef48dd
10248 changed files with 63654 additions and 6775 deletions
|
|
@ -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 < #)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
}}
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
}}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
Loading…
Add table
Add a link
Reference in a new issue