直接看代码和注释
注意一个条件,不符合条件的放到队列尾部
# coding=utf-8
class PrinterJobs(object):
"""
打印机任务排序
打印任务分为九个优先级,1-9值越大,优先级越高
打印机每次从队列头部取出第一个任务,如果优先级是最大则执行该任务,输出任务的索引,否则将任务放到队列尾部
"""
def __init__(self, jobs_list):
"""
预处理入参
:param jobs_list: 任务优先级构成的数组
"""
# 用于记录是否有错误
message = None
if isinstance(jobs_list, list):
for check in jobs_list:
if 1 <= check <= 9:
pass
else:
message = "Error in `{}` with `{}`, check please!".format(jobs_list, check)
else:
message = "Error in `{}` , check please!".format(jobs_list)
if message:
print message
jobs_list = []
# 用于记录索引的原数组
self.old_list = jobs_list
# 降序排列后的新数组
self.new_list = self.order_list()
def order_list(self):
"""
排序
:return: 降序排列的新数组
"""
tmp = []
for i in self.old_list:
tmp.append(i)
tmp.sort(reverse=True)
return tmp
def get_work_order(self):
"""
获取任务工作顺序
"""
lenth = len(self.old_list) - 1
# 新数组索引
new_index = 0
# 原数组索引
old_index = 0
# 统计算法次数
count = 0
# 遍历完成一次有序数组即可
while new_index <= lenth:
if self.new_list[new_index] == self.old_list[old_index] and self.new_list[new_index] != 0:
print "value is {}, index is {}".format(self.old_list[old_index], old_index)
# 循环遍历原数组,找到当前第一个最大值,输出之和索引后置为0,不参与后续的比较
self.old_list[old_index] = 0
# 有序数组前进一位
new_index += 1
# 原数组遍历下一位
old_index += 1
# 等同于将非最大任务放入队尾,起到循环遍历的效果
if old_index > lenth:
old_index = 0
# 统计比较运算+1
count += 1
print "本次任务一共进行了 {} 次比较运算".format(count)
运行结果示例:
if __name__ == '__main__':
a = [1, 9, 2, 1]
Job = PrinterJobs(jobs_list=a)
Job.get_work_order()
value is 9, index is 1
value is 2, index is 2
value is 1, index is 3
value is 1, index is 0
本次任务一共进行了 5 次比较运算
先输出9后面的1,再输出9前面的1,符合条件预期
版权归原作者 reole 所有, 如有侵权,请联系我们删除。