用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
################################
#欢迎交流讨论,如有转载,请注明来源
#http://www.cnblogs.com/elta/
################################