Python练习题:第5题 排序问题

这篇博客探讨了如何使用Python对三位数进行排序,包括三种方法:计数法、冒泡排序和内置sort()函数。通过测试输入数据,对比了不同方法的耗时和排序结果,所有方法得出的排序均为[2, 4, 6, 6, 9, 9, 23, 32, 34, 43, 43, 67, 68, 79, 98, 532]。" 46869475,3332899,"Tomcat配置详解:Server, Service, Executor与Connectors

第5题 排序问题_Python100道经典练习题
题目:输入三个整数x,y,z,请把这三个数由小到大输岀。
(下面程序扩展为多位数排序)
方法一:计算有多少个比自己小,这个个数就是该数的位置。
方法二:冒泡法
方法三:直接用sort()

# -*- coding: utf-8 -*-
#By AntinSnow
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]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值