Python100道经典练习题:第5题 排序问题

第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]

发布了46 篇原创文章 · 获赞 1 · 访问量 1556

猜你喜欢

转载自blog.csdn.net/AntInSnow/article/details/104917398