Algoritmo Python adequado para o problema de ponteiro duplo Xiaobai

Primeiro, a matriz é mesclada

1. Usando ponteiros analógicos e combinando duas matrizes 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. Descrição do ponteiro analógico:

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

Dois, dicotomia (método de meia busca)

1. Pesquisa binária de matrizes 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. Explicação da dicotomia

A dicotomia também é chamada de método de busca semi-localizadora.Após cada pesquisa, o intervalo de pesquisa é dividido pela metade, de modo que, quando a pesquisa termina, se houver apenas um número no intervalo de pesquisa, é determinado se esse é o número pesquisado. Não nesta matriz,

Três, lista vinculada (a diferença entre lista vinculada dupla e lista vinculada única)

Lista vinculada : é uma matriz usada para armazenar dados conectados por ponteiros e sua maior vantagem é que ele pode usar efetivamente o espaço de memória fragmentado. Em muitos idiomas, o tamanho da matriz deve ser definido antecipadamente e não pode ser alterado aleatoriamente após a definição, e a matriz pode armazenar apenas variáveis ​​do mesmo tipo. Se uma lista vinculada for usada, o comprimento da matriz poderá ser alterado e tipos diferentes de elementos poderão ser armazenados na mesma matriz.
Isso é muito semelhante à lista Python. Na verdade, o princípio de funcionamento da lista é uma lista vinculada, portanto a linguagem Python não possui ponteiros. Utilizamos seu método de ponteiro para implementar listas vinculadas.
Lista vinculada única : cada elemento da lista vinculada não armazena apenas o valor de cada elemento. Armazene também o valor do ponteiro deste elemento. Somente dessa maneira a lista vinculada pode ser conectada. Cada elemento da lista vinculada individualmente contém seu próprio valor e um ponteiro para o próximo número, porque o último número da lista vinculada não. O próximo número, então seu ponteiro está vazio.
Insira a descrição da imagem aqui
Lista vinculada dupla : os elementos da lista vinculada dupla são compostos por dois ponteiros e valores de elemento, um ponteiro aponta para o próximo elemento e a lista vinculada dupla de um elemento em um ponteiro pode ser percorrida nas duas direções, independentemente do número de travessias que podem ser retornadas pelo índice. Também podemos obter saída bidirecional.
Insira a descrição da imagem aqui
Nota : O ponteiro é uma variável que armazena a posição do próximo elemento
. Não há ponteiro no Python. Não usamos o Python para simular a lista vinculada. Entendemos a diferença entre a lista vinculada única e a lista vinculada dupla. Aqui, introduzimos principalmente o conceito Coisas sexuais, vamos completar todo o sistema de conhecimento de algoritmos.

Publicado 82 artigos originais · Gosto 652 · Visite mais de 60.000

Acho que você gosta

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