I'm doing a mergesort using the numpy library. It turned out that it was giving error. in the line "np.concatenate (result, left [i:])" there in merge function. The error is this:
/sorts/main.py", line 30, in merge
np.concatenate(resultado,esquerda[i:])
TypeError: only integer scalar arrays can be converted to a scalar index
The complete code:
import numpy as np
def bubbleSort(lista,parametros):
parametros[0] = 0
parametros[1] = 0
tamanho=lista.size-1
for i in range(0,tamanho):
for j in range(0,tamanho-i):
if lista[j] > lista[j+1]:
lista[j], lista[j+1] = lista[j+1], lista[j]
parametros["trocas"]+=1
parametros["comparacoes"]+=1
def merge(esquerda,direita,parametros):
if not esquerda.size or not direita.size:
parametros["comparacoes"] += 1
return esquerda or direita
resultado = np.array([])
i, j = 0, 0
while (resultado.size < esquerda.size + direita.size):
if esquerda[i] < direita[j]:
np.append(resultado,esquerda[i])
i+= 1
parametros["comparacoes"]+=1
else:
np.append(resultado,direita[j])
j+= 1
parametros["trocas"]+=1
if i == esquerda.size:
np.concatenate(resultado,esquerda[i:])
parametros["comparacoes"] += 1
break
elif j == direita.size:
np.concatenate(resultado,direita[:j])
parametros["comparacoes"] += 2
break
return resultado
def mergeSort(lista,parametros):
tamanho=lista.size
if tamanho< 2:
parametros["comparacoes"] += 1
return lista
meio = tamanho // 2
esquerda = mergeSort(lista[:meio],parametros)
direita = mergeSort(lista[meio:],parametros)
return merge(esquerda, direita,parametros)
parametros={"trocas":0,"comparacoes":0}
lista=np.array([80,5,11,-23,1,12,4])# Vetor exemplo
print(lista)
bubbleSort(lista,parametros)
print(lista)
print("Trocas: ", parametros["trocas"], "\nComparacoes: ", parametros["comparacoes"])
lista=np.array([80,5,11,-23,1,12,4])# Vetor exemplo
parametros=[0,0]
lista=mergeSort(lista,parametros)
print(lista)
print("Trocas: ", parametros["trocas"], "\nComparacoes: ", parametros["comparacoes"])