第5题 排序问题_Python100道经典练习题
题目:输入三个整数x,y,z,请把这三个数由小到大输岀。
(下面程序扩展为多位数排序)
方法一:计算有多少个比自己小,这个个数就是该数的位置。
方法二:冒泡法
方法三:直接用sort()
# -*- coding: utf-8 -*-
import time
num_list = list(map(int,input('请输入需要排序的数字(以空格隔开):').split(' ')))
'''自己想到的方法'''
def numindex(num_list):
num_len = len(num_list)
num_out = [0] * num_len
num_outlist = [0] * num_len
for i in range(1, num_len):
for j in range(i):
if num_list[i] > num_list[j]:
num_out[i] += 1
else:
num_out[j] += 1
for k in range(num_len):
num_outlist[num_out[k]] = num_list[k]
return num_outlist
'''网上的冒泡法'''
def bubblingM(num_list):
num_len = len(num_list)
flag = 1
while flag:
flag = 0
for i in range(1, num_len):
if num_list[i-1] > num_list[i]:
num_list[i-1], num_list[i] = num_list[i], num_list[i-1]
flag += 1
return num_list
'''测试时间性能'''
start = time.time()
for i in range(100000):
num_out1 = numindex(num_list)
end = time.time()
times = end - start
print('自己的方法耗时:%f'%times)
print(num_out1)
start = time.time()
for i in range(100000):
num_out1 = bubblingM(num_list)
end = time.time()
times = end - start
print('冒泡法耗时:%f'%times)
print(num_out1)
start = time.time()
for i in range(100000):
num_out1 = num_list
num_out1.sort()
end = time.time()
times = end - start
print('sort方法耗时:%f'%times)
print(num_out1)
测试输入数据:34 67 32 68 9 4 23 6 9 43 79 532 6 98 43 2
自己的方法耗时:4.585375
排序结果:[2, 4, 6, 6, 9, 9, 23, 32, 34, 43, 43, 67, 68, 79, 98, 532]
冒泡法耗时:0.379783
排序结果:[2, 4, 6, 6, 9, 9, 23, 32, 34, 43, 43, 67, 68, 79, 98, 532]
sort方法耗时:0.049970
排序结果:[2, 4, 6, 6, 9, 9, 23, 32, 34, 43, 43, 67, 68, 79, 98, 532]