当你的好朋友叫你一起来当op的时候
你-会不会犹豫呢??你会不会想要和他一起玩呢?玩就对了!超!原神这么好玩,一定要玩的!!这是正确的!!
所以,你一定要去加他的UID然后一起来当op哈哈哈。
那么,你有没有想过?
只要输入他的UID,就会准确的弹出好朋友的UID,一点都不带差的(哈哈,有点废话)
所以,初步当程序员你,会不会想过,这些(原神/王者)类大型游戏中这种最简单的去(搜索ID查找到好友)的基本算法原理是怎么实现的呢?
那就跟着雷电将军来看一看
不得不说!是真的
咳咳,好了,步入正题
在搜索UID添加好友的基本流程操作中
让我们看到了一个最简单的程序设计,二分查找!!!对,也就是折半查找!相对于暴力查找效率高了一半!
比如说查找第一个K
这样是不是更清楚了呢?
接下来代码演示一下:
第一种:C语言/ C++代码演示
# include
int main()
//二分法查找在有序数组中查找具体的某个数字n
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 7;//找7
int sz = sizeof(arr) / sizeof(arr[0]);//计算元素个数
int left = 0;//左下标
int right = (sz - 1);//右下标
while (left <= right)
{
int mid = (left + right) / 2;
if (arr[mid] > k)//要是比要找的数字大,左下标不变,右下标减一
{
right = mid - 1;
}
else if (arr[mid] < k)//要是比要找的数字小,右下标不变,左下标加一
{
left = mid + 1;
}
else
{
printf("找到了,下标为:%d\n", mid);
break;
}
}
if (left > right)
{
printf("找不到\n");
}
return 0;
}
C语言/ C++第二种方法演示:
int bsearchWithoutRecursion(int array[],int low,int high,int target)
{
while(low<=high)
{
int mid=low+(high-low)/2;//还是溢出问题
if(array[mid]>target)
high=mid-1;
else if(array[mid] low=mid+1; else return mid; } return-1; } 第二种:phython代码演示: def bin_search(data_list, val): low = 0 # 最小数下标 high = len(data_list) - 1 # 最大数下标 while low <= high: mid = (low + high) // 2 # 中间数下标 if data_list[mid] == val: # 如果中间数下标等于val, 返回 return mid elif data_list[mid] > val: # 如果val在中间数左边, 移动high下标 high = mid - 1 else: # 如果val在中间数右边, 移动low下标 low = mid + 1 return # val不存在, 返回None ret = bin_search(list(range(1, 10)), 3) print(ret) 第三种:PHP代码演示 function binsearch($x,$a){ $c=count($a); $lower=0; $high=$c-1; while($lower<=$high){ $middle=intval(($lower+$high)/2); if($a[$middle]>$x){ $high=$middle-1; } elseif($a[$middle]<$x){ $lower=$middle+1; } else{ return $middle; } } return -1; } 第四种: JavaScript代码 第5种:C#代码演示 public static int Method(int[] nums, int low, int high, int target) { while (low <= high) { int middle = (low + high) / 2; if (target == nums[middle]) { return middle; } else if (target > nums[middle]) { low = middle + 1; } else if (target < nums[middle]) { high = middle - 1; } } return -1; } 第6种: Go源代码 第7种:Swift源代码演示 func binarySearch var lowerBound = 0 var upperBound = a.count while lowerBound < upperBound { let midIndex = lowerBound + (upperBound - lowerBound) / 2 if a[midIndex] == key { return midIndex } else if a[midIndex] < key { lowerBound = midIndex + 1 } else { upperBound = midIndex } } return nil } 它的结构模型: 讲到这里的你,是不是还没听清呢? 那么,再次总结一下加深印象: var Arr = [3, 5, 6, 7, 9, 12, 15];
function binary(find, arr, low, high) {
if (low <= high) {
if (arr[low] == find) {
return low;
}
if (arr[high] == find) {
return high;
}
var mid = Math.ceil((high + low) / 2);
if (arr[mid] == find) {
return mid;
} else if (arr[mid] > find) {
return binary(find, arr, low, mid - 1);
} else {
return binary(find, arr, mid + 1, high);
}
}
return -1;
}
binary(15, Arr, 0, Arr.length - 1);
func binarySearch(checkSlice []int, findVal int) int {
pos := -1
left, right := 0, len(checkSlice) //此处right长度不减1 , 如果最大值为查找值,此处减一代码进入死循环
Loop:
for {
if(left >= right){
break Loop
}
mid := (left + right) / 2
switch true {
case checkSlice[mid] < findVal :
left = mid
case checkSlice[mid] == findVal :
pos = mid
break Loop
case checkSlice[mid] > findVal :
right = mid
}
}
return pos
}