mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-30 18:02:05 +00:00
54 lines
1.5 KiB
Nim
54 lines
1.5 KiB
Nim
import os
|
|
import strutils
|
|
|
|
# Generate some pseudo-random data
|
|
var seed: tuple[s1, s2, s3: int32] = (2'i32, 8'i32, 16'i32)
|
|
|
|
proc random(): int32 =
|
|
seed = (((((((seed[0] and 0x0007_FFFF'i32) shl 13'i32) xor seed[0]) shr
|
|
19'i32) and 0x0000_1FFF'i32) xor
|
|
((seed[0] and 0x000F_FFFE'i32) shl 12'i32)),
|
|
|
|
((((((seed[1] and 0x3FFF_FFFF'i32) shl 2'i32) xor seed[1]) shr
|
|
25'i32) and 0x0000_007F'i32) xor
|
|
((seed[1] and 0x0FFF_FFF8'i32) shl 4'i32)),
|
|
|
|
((((((seed[2] and 0x1FFF_FFFF'i32) shl 3'i32) xor seed[2]) shr
|
|
11'i32) and 0x001F_FFFF'i32) xor
|
|
((seed[2] and 0x0000_7FF0'i32) shl 17'i32)))
|
|
return seed[0] xor seed[1] xor seed[2]
|
|
|
|
var n = 9999999
|
|
|
|
var data: seq[int32]
|
|
newSeq (data, n)
|
|
for i in 0 .. data.high():
|
|
data[i] = random()
|
|
|
|
|
|
proc `$` (d: seq[int32]): string =
|
|
result = "[ "
|
|
for i in items (d):
|
|
result.addSep (", ", 2)
|
|
result.add ($(i and 0xFFFF_FFFF'i64))
|
|
result.add (" ]")
|
|
|
|
# Sort the data
|
|
proc sort (start, stop: int) =
|
|
if stop <= start+1:
|
|
return
|
|
|
|
var j = start
|
|
for i in start..stop-2:
|
|
if data[i] <% data[stop-1]:
|
|
swap (data[i], data[j])
|
|
inc (j)
|
|
swap (data[j], data[stop-1])
|
|
|
|
sort (start, j)
|
|
sort (j+1, stop)
|
|
|
|
sort (0, data.len)
|
|
echo (data[n div 2 - 1] and 0xFFFF_FFFF'i64, ", ",
|
|
data[n div 2] and 0xFFFF_FFFF'i64, ", ",
|
|
data[n div 2 + 1] and 0xFFFF_FFFF'i64) |