使用python在不使用内置函数的情况下对1到100之间的随机生成的1000万个数字进行排序,Quicksort在这里没有为我工作。
我使用了上述链接中的quicksort代码: http://interactivepython.org/runestone/static/pythonds/SortSearch/TheQuickSort.html
我在执行它时遇到错误: 对于x范围(0,100000): listOfNumbers.append(random.randint(1,100))
quickSort(listOfNumbers) 打印(listOfNumbers)
RuntimeError:超过最大递归深度
答案 0 :(得分:2)
您可以使用所需的任何排序算法,只要正确实现即可。但是问题是要求使用radix sort。特别是最笨拙的基数排序,一个存储桶计数器。
您总共有N=10,000,000
个值和一系列M=100
个不同的值。存储桶计数器将花费O(N+M)
的时间,这比O(N*log N)
和O(M)
的空间好, 1 可以忽略不计,并且。最重要的是,它非常简单:
def bucketsorted100(xs):
buckets = [0] * 101
for x in xs:
buckets[x] += 1
for x, count in enumerate(buckets):
yield from [x] * count
您显然可以扩展为不对1-100的数字进行硬编码(实际上,我对0-100的数字进行硬编码,浪费了1%的空间,但是谁在乎呢?)。或者,您可以添加对key
函数的支持。或者,您可以使用Counter
而不是list
来使其更简单。
1。从技术上讲,它是O(logN * M)
空间,因为计数范围最多为N
,占用logN
位,该值最多范围为100,占用恒定位数。但是实际上,所有计数都适合CPython中的单个30位“数字”,因此logN
因素永远不会出现。
答案 1 :(得分:1)
您可以使用强大的Bogosort。
import random
def is_sorted(data):
for i in range(len(data) - 1):
if data[i] > data[i + 1]:
return False
return True
def bogosort(data):
while not is_sorted(data):
random.shuffle(data)
return data
答案 2 :(得分:0)
也许numpy
会更快...您可以将数字转换为numpy array
然后使用numpy.sort
赞:
import numpy as np
mylist=[15,65,3,1,10,35,11,65,23,95,20,36,85,12,37,85,46,93] # ...
sorted_mylist=np.ndarray.tolist(np.sort(np.asarray(mylist)))
print sorted_mylist
为您提供:
[1, 3, 10, 11, 12, 15, 20, 23, 35, 36, 37, 46, 65, 65, 85, 85, 93, 95]