Skip to content

Instantly share code, notes, and snippets.

@sorah
Created May 7, 2009 09:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sorah/108009 to your computer and use it in GitHub Desktop.
Save sorah/108009 to your computer and use it in GitHub Desktop.
#sorah's quicksort
def get_center(ar);if ar.length % 2 != 0;ar[(ar.length) / 2];else;ar[(ar.length-1) / 2];end;end
def get_center_index(ar);if ar.length % 2 != 0;return (ar.length) / 2;else;return (ar.length-1) / 2;end;end
def wsort
zen_pi = get_center_index(zen)
zen_p = get_center(zen)
i = nil
flag = false
zen.each_index {|n|
if zen_p <= zen[n]
i = n
break
end
}
zen.reverse.each {|n|
if zen_p >= n
j = zen.index(n)
break
end
}
if i < j
tmpi = zen[i]
tmpj = zen[j]
zen[i] = tmpj
zen[j] = tmpi
flag = true
else
flag = false
end
while flag
flag = false
zen[i+1 .. (zen.length-1)].each {|n|
if zen_p <= n
i = zen.index(n)
break
end
}
zen[0 .. j-1].reverse.each {|n|
if zen_p >= n
j = zen.index(n)
break
end
}
if i < j
tmpi = zen[i]
tmpj = zen[j]
zen[i] = tmpj
zen[j] = tmpi
flag = true
else
flag = false
end
end
return [zen,i,j]
end
def quicksort ar
#0 1 [2] 3 4
#[0..2-1] [2+1..(ar.length-1)]
#pipot = get_center(ar)
pivot = get_center_index(ar)
zen = ar[0 .. pivot-1]
ato = ar[pivot+1 .. (ar.length-1)]
#前半処理
flag = true
sort1 = wsort(zen)
while flag
wsort sort1[0][0..(sort1[1]-1)]
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment