mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-29 17:34:43 +00:00
73 lines
1.7 KiB
Nim
Executable File
73 lines
1.7 KiB
Nim
Executable File
discard """
|
|
disabled: true
|
|
"""
|
|
|
|
import math, algorithm
|
|
|
|
proc sorted[T](a: openArray[T], order: TSortOrder): bool =
|
|
result = true
|
|
for i in 0 .. < a.high:
|
|
if cmp(a[i], a[i+1]) * order > 0:
|
|
echo "Out of order: ", a[i], " ", a[i+1]
|
|
result = false
|
|
|
|
proc bubbleSort[T](a: var openArray[T],
|
|
cmp: proc (x, y: T): int = cmp,
|
|
order = TSortOrder.Ascending) =
|
|
while true:
|
|
var sorted = true
|
|
for i in 0 .. a.len-2:
|
|
if cmp(a[i], a[i+1]) * order > 0:
|
|
swap(a[i], a[i+1])
|
|
sorted = false
|
|
if sorted: break
|
|
|
|
when isMainModule:
|
|
proc main() =
|
|
const order = Ascending
|
|
var data: seq[string] = @[]
|
|
|
|
for i in 0..10_000:
|
|
var L = random(59)
|
|
setLen(data, L)
|
|
for j in 0 .. L-1:
|
|
data[j] = $(math.random(90) - 10)
|
|
var copy = data
|
|
sort(data, cmp, order)
|
|
if not sorted(data, order):
|
|
#for x in items(data): echo x
|
|
break
|
|
else:
|
|
echo "SUCCESS!"
|
|
bubblesort(copy, cmp, order)
|
|
if copy.len != data.len:
|
|
quit "lengths differ!"
|
|
for i in 0 .. copy.high:
|
|
if copy[i] != data[i]:
|
|
quit "algorithms differ!"
|
|
|
|
for i in 0..10_000:
|
|
var data: seq[int] = @[]
|
|
var L = random(59)
|
|
setLen(data, L)
|
|
for j in 0 .. L-1:
|
|
data[j] = (math.random(90) - 10)
|
|
var copy = data
|
|
sort(data, cmp[int], order)
|
|
if not sorted(data, order):
|
|
#for x in items(data): echo x
|
|
break
|
|
else:
|
|
echo "SUCCESS!"
|
|
bubblesort(copy)
|
|
if copy.len != data.len:
|
|
quit "lengths differ!"
|
|
for i in 0 .. copy.high:
|
|
if copy[i] != data[i]:
|
|
quit "algorithms differ!"
|
|
|
|
main()
|
|
|
|
echo "done"
|
|
|