diff --git a/knsearch.py b/knsearch.py new file mode 100644 index 0000000..cf216bc --- /dev/null +++ b/knsearch.py @@ -0,0 +1,30 @@ +''' +题目: +有一个无序的序列list_c = [ +37, 99, 73, 48, 47, 40, 40, 25, 99, 51], 请先排序并打印输出。 +分别尝试插入 +[ +20,40,41,100]到序列中合适的位置,保证其有序。 +''' +list_c = [37, 99, 73, 48, 47, 40, 40, 25, 99, 51,99] +list_s = [20, 40, 41, 100] +#先排序 +order_list = sorted(list_c) +print(order_list) +#浅复制,保留原来数据 +ret = order_list[:] +def insert_sort(ret,num): + low = 0 #索引起点 + high = len(ret) #索引终点 + while low<high: # 起点索引大于或等于列表最后一个元素的索引,条件无法进入。 + mid = (low+high)//2 # 取列表中间点的索引 + if num<ret[mid]: # 条件判断,如果待插入列表的值小于有序列表对应mid索引的值,就向左查询 + high = mid-1 # 同时确认这个中间点mid索引就是ret列表的high最高索引 + else: # 如果待插入列表的值大于有序列表对应mid索引的值,就向右查询,求中点 + low = mid+1 # 同时确认这个中间点mid索引就是ret列表的开始索引low的值。 + return low # 这个开始索引low就是最终计算出来的待插入索引的位置low,所以返回low +for num in list_s: # 循环去取待插入列表的元素。 + index = insert_sort(ret,num)# 调用上面的函数取出插入元素索引值 + ret.insert(index,num) # 就地插入对应索引的值到列表ret中. +print(ret) # 打印插入元素后的列表 + diff --git a/my_search.py b/my_search.py index 6eaf4dc..d7f9b95 100644 --- a/my_search.py +++ b/my_search.py @@ -6,4 +6,20 @@ for i in range(1, 101): num = random.choice(alist) # 请完善二分查找函数binary_search(),查找出num在列表alist里面的索引位置 -def binary_search(alist,num): \ No newline at end of file +def binary_search(alist,num): + low = 0 + high = len(alist)-1 + while low <= high: + mid = (low + high) // 2 + guess = alist[mid] + if guess == num: + return mid + elif guess < num: + low = mid + 1 + else: + high = mid - 1 + return None + +result = binary_search(alist,num) +print("给的数是:",num) +print("他在列表里的索引是:",result) \ No newline at end of file