0


打印机任务排序python实现简易代码

直接看代码和注释

注意一个条件,不符合条件的放到队列尾部

# 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,符合条件预期

标签: python 算法

本文转载自: https://blog.csdn.net/reole/article/details/119712068
版权归原作者 reole 所有, 如有侵权,请联系我们删除。

“打印机任务排序python实现简易代码”的评论:

还没有评论