diff options
Diffstat (limited to 'sort.lua')
-rw-r--r-- | sort.lua | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/sort.lua b/sort.lua new file mode 100644 index 00000000..f749c122 --- /dev/null +++ b/sort.lua | |||
@@ -0,0 +1,56 @@ | |||
1 | $debug | ||
2 | |||
3 | function quicksort(r,s) | ||
4 | if s<=r then return end -- caso basico da recursao | ||
5 | local v=x[r] | ||
6 | local i=r | ||
7 | local j=s+1 | ||
8 | i=i+1; while x[i]<v do i=i+1 end | ||
9 | j=j-1; while x[j]>v do j=j-1 end | ||
10 | x[i],x[j]=x[j],x[i] | ||
11 | while j>i do -- separacao | ||
12 | i=i+1; while x[i]<v do i=i+1 end | ||
13 | j=j-1; while x[j]>v do j=j-1 end | ||
14 | x[i],x[j]=x[j],x[i] | ||
15 | end | ||
16 | x[i],x[j]=x[j],x[i] -- undo last swap | ||
17 | x[j],x[r]=x[r],x[j] | ||
18 | quicksort(r,j-1) -- recursao | ||
19 | quicksort(j+1,s) | ||
20 | end | ||
21 | |||
22 | function sort(a,n) -- selection sort | ||
23 | local i=1 | ||
24 | while i<=n do | ||
25 | local m=i | ||
26 | local j=i+1 | ||
27 | while j<=n do | ||
28 | if a[j]<a[m] then m=j end | ||
29 | j=j+1 | ||
30 | end | ||
31 | a[i],a[m]=a[m],a[i] -- swap a[i] and a[m] | ||
32 | i=i+1 | ||
33 | end | ||
34 | end | ||
35 | |||
36 | function main() | ||
37 | x=@() | ||
38 | n=-1 | ||
39 | n=n+1; x[n]="a" | ||
40 | n=n+1; x[n]="waldemar" | ||
41 | n=n+1; x[n]="luiz" | ||
42 | n=n+1; x[n]="lula" | ||
43 | n=n+1; x[n]="peter" | ||
44 | n=n+1; x[n]="raquel" | ||
45 | n=n+1; x[n]="camilo" | ||
46 | n=n+1; x[n]="andre" | ||
47 | n=n+1; x[n]="marcelo" | ||
48 | n=n+1; x[n]="sedrez" | ||
49 | n=n+1; x[n]="z" | ||
50 | -- quicksort(1,n-1) | ||
51 | print(x[0]..","..x[1]..","..x[2]..","..x[3]..","..x[4]..","..x[5]..","..x[6]..","..x[7]..","..x[8]..","..x[9]..","..x[10]) | ||
52 | sort (x, n-1) | ||
53 | print(x[0]..","..x[1]..","..x[2]..","..x[3]..","..x[4]..","..x[5]..","..x[6]..","..x[7]..","..x[8]..","..x[9]..","..x[10]) | ||
54 | end | ||
55 | |||
56 | |||