• Python中利用二分法在一万个有序数列中找到目标值并打印其索引


    # -*- coding: utf-8 -*-
    
    """
    在一万个有序数列中找到目标值并打印其索引
    目前测试的是在一万个有序数列中,每个值的范围在两万以内。当然,数列的长度(这里是一万)以及值的范围(这里的两万)都可以自定义。
    
    重点知识:
    二分法
    递归函数
    """
    
    import random
    
    
    def create_data(list_size, range_num):
        """
        随机生成一个列表,指定了列表长度以及每个值所在的范围
        :param list_size: 列表长度
        :param range_num: 每个在列表中的值的大小范围
        :return: 生成的列表
        """
        temp_set = set()
        while len(temp_set) < list_size:
            i = random.randrange(range_num)
            if i not in temp_set:
                temp_set.add(i)
        data_set = list(temp_set)
        data_set.sort()
        return data_set
    
    
    def search_goal(data, find_num):
        """
        在列表中查找目标值
        :param data: 传入的列表
        :param find_num: 查找的目标值
        :return: 返回布尔值,在列表中是否查找到了
        """
        if len(data) > 1:
            mid_index = int(len(data) / 2)
            if data[mid_index] == find_num:
                # print("目标数字[{0}]已找到!".format(find_num))
                return True
            elif data[mid_index] > find_num:
                return search_goal(data[:mid_index], find_num)
            else:
                return search_goal(data[mid_index:], find_num)
        else:
            if data[0] == find_num:
                # print("目标数字[{0}]已找到!".format(find_num))
                return True
            else:
                print("33[1;31m 目标数字[{0}]在列表中不存在!33[0m".format(find_num))
    
    
    if __name__ == '__main__':
        while True:
            goal_num = input("在一万个有序数列(该序列数字范围在两万以内)中查找数字;请输入需要查找的数字:")
            if goal_num.isdigit():
                goal_num = int(goal_num)
    
                data_created = create_data(10000, 20000)
                res = search_goal(data_created, goal_num)
                if res:
                    print("33[1;32m 目标数字[{0}]已找到,其在列表中的索引为{1}33[0m".format(goal_num, data_created.index(goal_num)))
            else:
                print("33[1;31m 目标值输入无效,请重新输入。33[0m")
    
  • 相关阅读:
    在CentOS中安装VMware Tools
    引用
    iomanip头文件库函数
    第2章 寄存器(CPU工作原理)
    二维差分
    组合数学——康托展开和逆康托展开
    动态规划精讲(一)区域和检索
    动态规划精讲(一)最大子矩阵
    freopen
    动态规划精讲(一)环形子组数的最大和
  • 原文地址:https://www.cnblogs.com/a72hongjie/p/8997094.html
Copyright © 2020-2023  润新知