All pastes #909791 Raw Edit

anders

public lua v1 · immutable
·published 2008-02-19 14:33 UTC
rendered paste body
-- original:-- two implementations of a sort function-- this is an example only. Lua has now a built-in function "sort"-- extracted from Programming Pearls, page 110function qsort(x,l,u,f) if l<u then  local m=math.random(u-(l-1))+l-1	-- choose a random pivot in range l..u  x[l],x[m]=x[m],x[l]			-- swap pivot to first position  local t=x[l]				-- pivot value  m=l  local i=l+1  while i<=u do    -- invariant: x[l+1..m] < t <= x[m+1..i-1]    if f(x[i],t) then      m=m+1      x[m],x[i]=x[i],x[m]		-- swap x[i] and x[m]    end    i=i+1  end  x[l],x[m]=x[m],x[l]			-- swap pivot to a valid place  -- x[l+1..m-1] < x[m] <= x[m+1..u]  qsort(x,l,m-1,f)  qsort(x,m+1,u,f) endendfunction selectionsort(x,n,f) local i=1 while i<=n do  local m,j=i,i+1  while j<=n do   if f(x[j],x[m]) then m=j end   j=j+1  end x[i],x[m]=x[m],x[i]			-- swap x[i] and x[m] i=i+1 endendfunction show(m,x) io.write(m,"\n\t") local i=1 while x[i] do  io.write(x[i])  i=i+1  if x[i] then io.write(",") end end io.write("\n")endfunction testsorts(x) local n=1 while x[n] do n=n+1 end; n=n-1		-- count elements show("original",x) qsort(x,1,n,function (x,y) return x<y end) show("after quicksort",x) selectionsort(x,n,function (x,y) return x>y end) show("after reverse selection sort",x) qsort(x,1,n,function (x,y) return x<y end) show("after quicksort again",x)end-- array to be sortedx={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"}testsorts(x)-- lstrip:function qsort(x,l,u,f)if l<u then local m=math.random(u-(l-1))+l-1 x[l],x[m]=x[m],x[l]local t=x[l]m=l local i=l+1 while i<=u do if f(x[i],t)then m=m+1 x[m],x[i]=x[i],x[m]end i=i+1 end x[l],x[m]=x[m],x[l]qsort(x,l,m-1,f)qsort(x,m+1,u,f)end end function selectionsort(x,n,f)local i=1 while i<=n do local m,j=i,i+1 while j<=n do if f(x[j],x[m])then m=j end j=j+1 end x[i],x[m]=x[m],x[i]i=i+1 end end function show(m,x)io.write(m,"\n\t")local i=1 while x[i]do io.write(x[i])i=i+1 if x[i]then io.write(",")end end io.write("\n")end function testsorts(x)local n=1 while x[n]do n=n+1 end;n=n-1 show("original",x)qsort(x,1,n,function(x,y)return x<y end)show("after quicksort",x)selectionsort(x,n,function(x,y)return x>y end)show("after reverse selection sort",x)qsort(x,1,n,function(x,y)return x<y end)show("after quicksort again",x)end x={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"}testsorts(x)