def binary_search(arr,target):
    # 初始化左右边界
    left=0
    right=len(arr)-1
    while left <= right:
        #计算中间值
        mid=(left+right)//2
        if target == arr[mid]:
            return mid
        elif target > arr[mid]:
            left = mid + 1
        else:
            right = mid - 1
    return -1 #没找到

test_list=[1,3,6,8,12,15,23,26,31,35]
print("查找6的位置",binary_search(test_list,6))
'''
线性查找
线性查找是从头到尾逐个比较数组中的每个元素,直到找到目标值或遍历完整个数组。
1.从第一个元素开始,依次与目标值比较
2.如果相等,返回当前索引位置
3.如果遍历完所有元素都没找到,返回-1
'''
def X_x(arr,target):
    for i in range(len(arr)):
        if arr[i] == target:
            return i
    return -1
test_list=[1,3,6,8,12,15,23,26,31,35]
print("查找15的位置",X_x(test_list,15))
'''
选择排序
选择排序的核心思想是,每一轮从未排序部分选出最小(或最大)的元素,
放到已排序部分的末尾。
1.初始状态,所有元素未排序,即未排序区间为[0,n-1]
2.选取[0,n-1]中的最小元素,将其与索引0处的元素交换。数组前1个元素已排序。
3.选取[1,n-1]中的最小元素,将其与索引1处的元素交换。数组前2个元素已排序。
4.选取[2,n-1]中的最小元素,将其与索引2处的元素交换。数组前3个元素已排序。
5.以此类推。经过n-1轮选择与交换后,数组前n-1个元素已排序。
6.仅剩的一个元素必定是最大元素,无须排序,因此数组排序完成。
'''
def selection_sort(nums):
    """选择排序"""
    n = len(nums) #数组长度
    # 外循环:未排序区间为 [i, n-1]
    for i in range(n - 1):
        # 内循环:找到未排序区间内的最小元素
        k = i   #假设当前位置i的元素是最小值
        for j in range(i + 1, n):
            if nums[j] < nums[k]:
                k = j  # 记录最小元素的索引
        # 将该最小元素与未排序区间的首个元素交换
        nums[i], nums[k] = nums[k], nums[i]
    return nums
nums=[6,2,8,1,5]
print("排序后的数组:",selection_sort(nums))

更多推荐