Skip to content

Instantly share code, notes, and snippets.

@simlay
Created December 6, 2012 08:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save simlay/4222674 to your computer and use it in GitHub Desktop.
Save simlay/4222674 to your computer and use it in GitHub Desktop.
Recursive Dropsort
#!/usr/bin/env python
import sys
import math
import numpy as np
def main(size):
numbers = []
for i in xrange(size):
numbers.append(int(np.random.uniform(0, 100)))
#numbers.append(int(np.random.normal(10, 4)))
#numbers.append(int(np.random.poisson(10)))
#numbers.append(int(np.random.logistic(10, 10)))
save = [x for x in numbers]
sorted_numbers = bogo_sort(numbers)
#print save, sorted_numbers
def bogo_sort(unsorted_numbers):
#print unsorted_numbers
if len(unsorted_numbers) <= 1:
return unsorted_numbers
last = unsorted_numbers[0]
drop_list = []
sorted_list = []
for i in [x for x in unsorted_numbers]:
if last > i:
drop_list.append(i)
else:
sorted_list.append(i)
last = i
print float(len(drop_list))/float(len(unsorted_numbers))
sorted_drop_list = bogo_sort(drop_list)
return merge(sorted_list, sorted_drop_list)
def merge(left, right):
result = []
i, j = 0, 0
while i < len(left) and j < len(right):
if left[i] <= right[j]:
result.append(left[i])
i += 1
else:
result.append(right[j])
j += 1
if j == len(right):
result = result + left[i:]
if i == len(left):
result = result + right[j:]
return result
if __name__ == "__main__":
size = 100
if len(sys.argv) > 1:
size = int(sys.argv[1])
main(size)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment