用7次比较完成5个元素的排序

7次比较完成5个元素的排序:

         有五个数字,[a, b, c, d, e],进行排序。以下排序均按从小到大进行排序:

1)       将a与b进行排序,排序结果为[a’, b’],共用1次比较,累计1次比较;

2)       将c与d进行排序,排序结果为[c’, d’],共用1次比较,累计2次比较;

3)       将a’与c’进行比较,若a’ < c’,则a’ < c’ < d’,同时a’ < b’;否则 c’ < a’ < b’,同时c’ < d’。共用1次比较,累计3次比较。将未排入序列的数字记为x;

4)       将e向已排序的三个元素中进行插入,最大需2次比较,累计5次比较;

5)       将x将向序列中进行排序。由于已知x比序列序列中一个元素要大,所以x一定比当前序列中最左值要大,所以最多还要和三个元素进行比较,需要2次比较,累计7次比较。

 

程序代码如下所示:

#! /usr/bin/python

import random

nums = random.sample(range(1, 100), 5)

print "Generate ", nums

# step 1
if nums[0] > nums[1]:
    tmp = nums[1]
    nums.remove(tmp)
    nums.insert(0, tmp)

# step 2
if nums[2] > nums[3]:
    tmp = nums[3]
    nums.remove(tmp)
    nums.insert(2, tmp)

# step 3
save_num = 0
if nums[0] < nums[2]:
    save_num = nums[1]
else:
    save_num = nums[3]
    tmp = nums[2]
    nums.remove(tmp)
    nums.insert(0,tmp) 

nums.remove(save_num)

# step 4
tmp = nums[3]
nums.remove(tmp)
if tmp < nums[1]:
    if tmp < nums[0]:
        nums.insert(0, tmp)
    else:
        nums.insert(1, tmp)
else:
    if tmp < nums[2]:
        nums.insert(2, tmp)
    else:
        nums.insert(3, tmp)

# step 5
if save_num < nums[2]:
    if save_num < nums[1]:
        nums.insert(1, save_num)
    else:
        nums.insert(2, save_num)
else:
    if save_num < nums[3]:
        nums.insert(3, save_num)
    else:
        nums.insert(4, save_num)

# Last list
print "Final ", nums

转载于:https://www.cnblogs.com/elta/p/5423754.html

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值