1、随机生成1万个整数,范围在0-10万之间,分别进行简单选择排序、快速排序(自行递归实现的)以及内置sort函数3种排序,打印出3种排序的运行时间。
In [1]:
#python默认的递归深度是很有限,可手工设置递归调用深度
import random,time
import sys,copy
sys.setrecursionlimit(100000)
def sort_simple_selection(seq):
test_seq = seq.copy()
start_time = time.time()
for i in range(len(test_seq)-1):
min = i
for j in range(i+1, len(test_seq)):
if test_seq[j] < test_seq[min]:
min = j
test_seq[i], test_seq[min] = test_seq[min], test_seq[i]
end_time = time.time()
return end_time - start_time
def quick_sort(seq):
test_seq = seq.copy()
start_time = time.time()
left_seq = []
right_seq = []
p=test_seq[0]
for number in test_seq[1:]:
if number <= p:
left_seq.append(number)
else:
right_seq.append(number)
if left_seq:
left_seq = quick_sort(left_seq)
if right_seq:
right_seq = quick_sort(right_seq)
end_time = time.time()
return end_time - start_time
def computer_sorted(seq):
test_seq = seq.copy()
start_time = time.time()
test_seq.sort()
end_time = time.time()
return end_time - start_time
random_numbers = [random.randint(0,100000) for i in range(10000)]
print('sort_simple_selection time =',sort_simple_selection(random_numbers))
print('quick_sort time =',quick_sort(random_numbers))
print('computer_sorted(sort()) time =',computer_sorted(random_numbers))
2、随机生成1万个整数,范围在0-10万之间,求其中每个整数出现的次数。并按照整数大小排序输出整数及出现次数。
In [2]:
import random
def sort_randnums(numbers):
numbers.sort()
num_freq_dict = {}
for number in numbers:
if number in num_freq_dict:
num_freq_dict[number] += 1
else:
num_freq_dict[number] = 1
return num_freq_dict
random_numbers = [random.randint(0,100000) for i in range(10000)]
sorted_numbers = sort_randnums(random_numbers)
print ('从小到大输出其中的前60个:')
for i ,item in enumerate(sorted_numbers):
print ( '{0:6} {1}'.format(item,sorted_numbers[item]))
if i == 60:
break