Algoritmo de Python adecuado para el problema de doble puntero Xiaobai

Primero, la matriz se fusiona

1. Usando punteros analógicos y combinando dos matrices ordenadas

# 使用指针合并两个数组
arr1 = [1,3,4,6,7] 
arr2 = [2,5,8,9,10]
#定义两个有序数组,并初始化赋值
ind = 0
# ans比较时的角标
ans = arr1.copy()
#ans 排序结果初始化为arr1

for i in range(0,len(arr2)):
	while ind < len(arr1):
		if arr2[i]<= arr1[ind]: #范围小于数组的元素下标的最大值
			ans.insert(ind + i ,arr2[i]) #向第一非数组中插入第二个数组中的数字
			break #跳出当前循环
		else:
			ind +=1  #ind指向的数字小于i指向的数字,ind向后移动一位

	else:
		ans =ans +arr2[i:] #ans加上arr2中剩余的元素
		break
print(ans,type(ans))
#输出结果: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] <class 'list'>

2. Descripción del puntero analógico:

- 指针:内存空间变量,可以通过一个数组中的没个元素的下标找出它的值,
即存储这个元素位置的变量可以看作一个指针,即python中模拟指针问题
- 实例中 ind是存储数组中数值的下角标的变量,ans用于存储排序完成后数组中的变量
- 使用for循环是因为同一个数字前面可能插入两个及以上的数字,
- python中的数组和列表时一个概念,我们这里不区分,

Dos, dicotomía (medio método de búsqueda)

1. Búsqueda binaria de matrices ordenadas

# 有序数组的二分法查找
number = [1,2,3,4,5,6,7,8,9,10,11,12]
#初始化定义一个数组
head = 0  #定义指针头
tail =len(number) #定义指针的尾
#数组的长度是最大下标数加1
search = int(input('请输入要搜索的数字:'))
while  tail - head >1:
	mid = (head + tail ) // 2  #通过整除,找出中间角标 
	if search < number[mid]:
		tail =mid
	if  search > number[mid]:
		head= mid 
	if search == number[mid]:
		ans =mid 
		break
else :
	if search == number[head-1]:
		ans = head
	else :
		ans = -1 	#数组不存在搜索的数字
if ans == -1:
	print(search,'不在数组中')
else:
	print(search,'在数组中的索引位置为:',ans)	


2. Explicación de la dicotomía.

La dicotomía también se denomina método de búsqueda de búsqueda parcial. Después de cada búsqueda, el rango de búsqueda se reduce a la mitad, de modo que cuando la búsqueda está al final, si solo queda un número en el rango de búsqueda, se determina si es el número buscado. No en esta matriz,

Tres, lista vinculada (la diferencia entre lista doble vinculada y lista única vinculada)

Lista enlazada : es una matriz utilizada para almacenar datos conectados por punteros, su mayor ventaja es que puede usar efectivamente espacio de memoria fragmentado. En muchos idiomas, el tamaño de la matriz se debe definir de antemano y no se puede cambiar al azar después de la definición, y la matriz solo puede almacenar variables del mismo tipo. Si se usa una lista vinculada, la longitud de la matriz se puede cambiar y se pueden almacenar diferentes tipos de elementos en la misma matriz.
Esto es muy similar a la lista de Python. De hecho, el principio de funcionamiento de la lista es una lista vinculada, por lo que el lenguaje Python no tiene un puntero. Utilizamos su método de puntero para implementar una lista vinculada.
Lista vinculada individual : cada elemento de la lista vinculada no solo almacena el valor de cada elemento. También almacene el valor del puntero de este elemento. Solo de esta manera se puede conectar la lista vinculada. Cada elemento de la lista vinculada individualmente contiene su propio valor y un puntero al siguiente número, porque el último número de la lista vinculada no. El siguiente número, por lo que su puntero está vacío.
Inserte la descripción de la imagen aquí
Lista de doble enlace : Los elementos en la lista de doble enlace están compuestos por dos punteros y valores de elementos, un puntero apunta al siguiente elemento, y la lista de doble enlace de un elemento en un puntero se puede recorrer en ambas direcciones, independientemente del número de recorrido que se pueda devolver por índice. También podemos lograr resultados bidireccionales.
Inserte la descripción de la imagen aquí
Nota : El puntero es una variable que almacena la posición del siguiente elemento
. No hay ningún puntero en Python. No usamos Python para simular la lista vinculada. Aquí entendemos la diferencia entre la lista vinculada simple y la lista vinculada doble. Aquí presentamos principalmente el concepto Cosas sexuales, permítanos completar todo el sistema de conocimiento del algoritmo.

82 artículos originales publicados · Me gusta 652 · Visita 60,000+

Supongo que te gusta

Origin blog.csdn.net/weixin_42767604/article/details/105455335
Recomendado
Clasificación