python一个关于二分法查找元素的实现

# coding=utf-8import time

def find_ele(alist, ele):    if ele < alist[0] or ele > alist[len(alist) - 1]:        print("%d not in alist" % ele)        return    last_index = len(alist) - 1    center_index = last_index // 2    loop_flag = True    loop_cout = 0    while loop_flag:        # 使用二分法查找元素是否在有序列表内        loop_cout += 1        while alist[center_index] < ele:            loop_cout += 1            #最后一个元素获取            center_index = (center_index + last_index + 1) // 2            if center_index == last_index:                # 最后一个元素                if alist[center_index] == ele:                    print("%d in alist" % ele)                else:                    print("%d not in alist" % ele)                loop_flag = False                break        while alist[center_index] > ele:            loop_cout += 1            last_index = center_index            center_index = last_index // 2            if center_index == last_index:                # 最后一个元素                if alist[center_index] == ele:                    print("%d in alist" % ele)                else:                    print("%d not in alist" % ele)                loop_flag = False                break        if alist[center_index] == ele:            print("%d in alist" % ele)            loop_flag=False

def main():    print(time.time())    alist = list(range(100000000))    # alist.pop(98)    find_ele(alist, 100)    print (time.time())

if __name__ == "__main__":    main()

原文地址:https://www.cnblogs.com/sssantiago/p/9490298.html

时间: 2024-10-18 12:09:32

python一个关于二分法查找元素的实现的相关文章

二分法查找元素位置

普通二分法查找元素: #include <stdio.h> #include <stdlib.h> int BinarySearch(int* a, int n, int pos) { int left = 0; int right = n-1; while (left <= right) { int mid = left+(right-left)/2; if(pos == a[mid]) { return mid; } else if(pos < a[mid]) {

python递归函数及二分法查找

函数的递归: 在一个函数的内部调用自己 死循环: 可以无限循环,不会停止 while True: print('我不是递归') 递归: 不是死循环,有最大循环深度 def story(): print('我是递归') story() story() 超过了递归的最大深度报错 RecursionError: maximum recursion depth exceeded while calling a Python object 官网上 源码中设置的递归深度: 1000自己实际测试递归深度: 9

Python写个二分法查找

笔者是一个通信测试攻城狮,之前做过一段时间的持续集成.工作内容只要就是对主线版本进行基本通信功能守护,测试执行都是自动化完成,也是那个时候开始接触到代码. 当时经常遇到的一个问题是:某一天我们发现版本有重大BUG,但是到上一次我们验证PASS中间已经经历过很多版本,我们需要手动从中间找到第一个出现BUG的版本,当然最简单的方法是二分法,取中间版本,根据有没有BUG再缩小范围,继续取中间版本...当时我的想法就是思路很固定,完全可以自动化完成,可惜当时我不会写代码...直到今天看Python递归函

python 递归和二分法查找

 1. 递归: 自己调自己难点:不好想,需要找规律不好读  2. 二分法 头,结尾,取中间, 不停的改变左和右,间接改变中间,查询效率非常高 1. 递归(方法一:) # 递归的用处: 遍历树形结构(拿一个数据进行遍历,得到两个结果在进行遍历,得到四个结果...,这是树形结构) import os filePath = "d:/untitled" it = os.listdir(filePath) # 查看文件夹中的文件, # print(it) # 以列表的形式打印 print(&qu

二分法查找和快速排序

二分法是分治算法的一种特殊形式,利用分治策略求解时,所需时间取决于分解后子问题的个数.子问题的规模大小等因素,而二分法,由于其划分的简单和均匀的特点,是查找数据时经常采用的一种有效的方法. 快速排序的实质也是二分法,下面就写一个快速排序+二分法查找的栗子??: 1 #include<stdio.h> 2 3 4 //快速排序 5 void QuickSort(int * a,int left,int right) 6 { 7 if(left>right) 8 { 9 return; 10

python的算法:二分法查找(1)

1.什么是二分法查找: 1.从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束: 2.如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较. 3.如果在某一步骤数组为空,则代表找不到. 每次都是i减半查找,其时间消耗为O(logn) 最简单的一个循环算法就是: def binary_search_loop(lst,value): low,high=0,len(value)-1 while low<=high: mid=

python 实现二分法查找

二分查找图 二叉树: 代码 #!/usr/bin/python #-*-coding:utf-8-*- #---------------------------------------------------------------------------------------- # to_do : binary find # authors: zuoxingyu # time : 2014-06-07 #--------------------------------------------

二分法查找(数组元素无序)

问题描述: 一数组,含有一堆无序数据,首先将数据按顺序排列,再用二分法实现某个元素的查找,若找到,返回该元素在数组中的下表,否则,返回不存在提示信息. #include<stdio.h> #include<stdlib.h> int *bubble_sort(int a[],int n)//冒泡排序(将数据升序排列) { int i; int j; int tmp; for(j=0;j<n-1;++j)//n个元素需要排序n-1趟 { for(i=0;i<n-j-1;+

[leetcode] 34. 在排序数组中查找元素的第一个和最后一个位置(Java)

34. 在排序数组中查找元素的第一个和最后一个位置 题目要求用O(logn),明显要用二分. 其实二分不难,难的是要处理好边界 class Solution { public int[] searchRange(int[] nums, int target) { int i = 0, j = nums.length; int mid = (i + j) / 2; int p = -1; while (i < j) { if (nums[mid] == target) { p = mid; bre