"David Hlácik" <[email protected]> wrote

yes it is homework , this is result :

#! /usr/bin/python
def sort(numbers):
"sort n positive integers in O(n) provided that they are all < n^2"
       N = len(numbers) # get size of test numbers

       buckets_mod = [[] for i in xrange(N)]
       buckets_sorted = [[] for i in xrange(N+1)]

# group numbers to buckets (list of numbers) with common modulus
       for n in numbers:
               buckets_mod[n % N].append(n)
       print "buckets_mod: %s" % buckets_mod

It would be interesting to see if using a dictionasry aws a sparce
array was any faster - it would save the initialisation step and
reduce the number of accesses of empty lists.

       # check numbers in buckets
       for l in buckets_mod:
               for n in l:
                       buckets_sorted[n / N].append(n)
       print "buckets_sorted: %s" % buckets_sorted

# search through sorted buckets and return list of sorted numbers
       return [n for l in buckets_sorted for n in l]

Hope it is optimal and OK, what you guys thinks?

Its almost certainly not optimal but from some basic testing it seems to
work and is linear as far as I can see (albeit with 5 loops over N).

Alan G

_______________________________________________
Tutor maillist  -  [email protected]
http://mail.python.org/mailman/listinfo/tutor

Reply via email to