Skip to content

Instantly share code, notes, and snippets.

@honza
Created February 6, 2012 01:23
Show Gist options
  • Save honza/1748793 to your computer and use it in GitHub Desktop.
Save honza/1748793 to your computer and use it in GitHub Desktop.
Quicksort in Haskell, Python, CoffeeScript and C
qs = (arr) ->
if arr.length <= 1
return arr
[].concat qs(i for i in arr when i < arr[0]), [arr[0]], qs(i for i in arr when i > arr[0])
qsort (p:xs) = qsort [x | x<-xs, x<p] ++ [p] ++ qsort [x | x<-xs, x>=p]
// To sort array a[] of size n: qsort(a,0,n-1)
void qsort(int a[], int lo, int hi)
{
int h, l, p, t;
if (lo < hi) {
l = lo;
h = hi;
p = a[hi];
do {
while ((l < h) && (a[l] <= p))
l = l+1;
while ((h > l) && (a[h] >= p))
h = h-1;
if (l < h) {
t = a[l];
a[l] = a[h];
a[h] = t;
}
} while (l < h);
a[hi] = a[l];
a[l] = p;
qsort( a, lo, l-1 );
qsort( a, l+1, hi );
}
}
def qs(array):
if len(array) == 0 or len(array) == 1:
return array
p = array[0]
lesser = [i for i in array if i < p]
greater = [i for i in array if i > p]
return qs(lesser) + [p] + qs(greater)
# Or even
def qs(ar):
if len(ar) == 0 or len(ar) == 1:
return ar
p = ar[0]
return qs([i for i in ar if i < p]) + [p] + qs([i for i in ar if i > p])
quicksort :: Ord a => [a] -> [a]
quicksort [] = []
quicksort (p:xs) = (quicksort lesser) ++ [p] ++ (quicksort greater)
where
lesser = filter (< p) xs
greater = filter (>= p) xs
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment