用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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM