summaryrefslogtreecommitdiff
path: root/test/sort.lua
diff options
context:
space:
mode:
Diffstat (limited to 'test/sort.lua')
-rw-r--r--test/sort.lua72
1 files changed, 35 insertions, 37 deletions
diff --git a/test/sort.lua b/test/sort.lua
index 14d4cf22..d665e96b 100644
--- a/test/sort.lua
+++ b/test/sort.lua
@@ -1,28 +1,25 @@
$debug
-function quicksort(r,s)
- if s<=r then return end -- caso basico da recursao
- local v, i, j = x[r], r, s+1
- i=i+1; while x[i]<v do i=i+1 end
- j=j-1; while x[j]>v do j=j-1 end
- x[i],x[j]=x[j],x[i]
- while j>i do -- separacao
- i=i+1; while x[i]<v do i=i+1 end
- j=j-1; while x[j]>v do j=j-1 end
- x[i],x[j]=x[j],x[i]
- end
- x[i],x[j]=x[j],x[i] -- undo last swap
- x[j],x[r]=x[r],x[j]
- quicksort(r,j-1) -- recursao
- quicksort(j+1,s)
+function quicksort(a,r,s)
+ if s<=r then return end
+ local v, i, j = a[r], r, s+1
+ repeat
+ i=i+1; while a[i]<v do i=i+1 end
+ j=j-1; while a[j]>v do j=j-1 end
+ a[i],a[j]=a[j],a[i]
+ until j<=i
+ a[i],a[j]=a[j],a[i] -- undo last swap
+ a[j],a[r]=a[r],a[j]
+ quicksort(a,r,j-1)
+ quicksort(a,j+1,s)
end
-function sort(a,n) -- selection sort
+function selectionsort(a,n)
local i=1
while i<=n do
local m, j = i, i+1
while j<=n do
- if a[j]<a[m] then m=j end
+ if a[j]>a[m] then m=j end -- reverse sort
j=j+1
end
a[i],a[m]=a[m],a[i] -- swap a[i] and a[m]
@@ -30,25 +27,26 @@ function sort(a,n) -- selection sort
end
end
-function main()
- x={}
- n=-1
- n=n+1; x[n]="a"
- n=n+1; x[n]="waldemar"
- n=n+1; x[n]="luiz"
- n=n+1; x[n]="lula"
- n=n+1; x[n]="peter"
- n=n+1; x[n]="raquel"
- n=n+1; x[n]="camilo"
- n=n+1; x[n]="andre"
- n=n+1; x[n]="marcelo"
- n=n+1; x[n]="sedrez"
- n=n+1; x[n]="z"
- print(x[0]..","..x[1]..","..x[2]..","..x[3]..","..x[4]..","..x[5]..","..x[6]..","..x[7]..","..x[8]..","..x[9]..","..x[10])
- quicksort(1,n-1)
- print(x[0]..","..x[1]..","..x[2]..","..x[3]..","..x[4]..","..x[5]..","..x[6]..","..x[7]..","..x[8]..","..x[9]..","..x[10])
- sort (x, n-1)
- print(x[0]..","..x[1]..","..x[2]..","..x[3]..","..x[4]..","..x[5]..","..x[6]..","..x[7]..","..x[8]..","..x[9]..","..x[10])
+function show(m,x)
+ write(m.."\n\t")
+ local i=0
+ while x[i] do
+ write(x[i])
+ i=i+1
+ if x[i] then write(",") end
+ end
+ write("\n")
end
-main()
+x={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"}
+
+n=1 while x[n] do n=n+1 end -- count elements
+x[0]="A" x[n]="Z" -- quicksort need sentinels
+
+show("original",x)
+
+quicksort(x,1,n-1)
+show("after quicksort",x)
+
+selectionsort(x, n-1)
+show("after reverse selection sort",x)