У меня проблема с сортировкой моего Hashtable. У меня есть методы для сравнения чисел, букв и алгоритма сортировки пузырьков. Вывод сортировки не является моим желаемым, потому что он печатает хеш-таблицу с помощью вставки-заказа (сначала вставлен - сначала напечатан), и то, что я хочу, сортирует по клавише в порядке возрастания или по значению также возрастает. Ключи - это целые числа, а значения - это строки. Вот код:Сортировка Hashtable с использованием сортировки пузыря C++
#include<iostream>
#include<string>
using namespace std;
const int size = 100;
class Binding
{
public:
int key;
string value;
Binding *next;
Binding(int key, string value)
{
this->key = key;
this->value = value;
this->next = NULL;
}
};
class HashTable
{
private:
Binding** tarray;
public:
HashTable()
{
array = new Binding*[size];
for(int i = 0; i < size; i++)
{
array[i] = NULL;
}
}
int insert(int key, string value)
{
int hash = (key % size);
Binding *record = array[hash];
Binding *previous = NULL;
if(record != NULL)
{
previous = record;
record = record->next;
}
else if(record == NULL)
{
record = new Binding(key, value);
if (previous == NULL)
{
array[hash] = record;
}
else
{
previous->next = record;
}
}
else
{
record->value = value;
}
}
int compareLetters(const void *a, const void *b)
{
Binding *A = (Binding*)a;
Binding* B = (Binding*)b;
int compare = strcmp(A->letter, B->letter);
if(compare == 0)
return 0;
else if(compare > 0)
return 1;
else if(compare < 0)
return -1;
}
int compareNumbers(const void *a, const void *b)
{
Binding *A = (Binding*)a;
Binding *B = (Binding*)b;
if(A->key > B->key)
return 1;
else if(A->key < B->key)
return -1;
else
return 0;
}
void bubble_sort()
{
Binding *temp;
for(int i=1; i<size; i++)
{
for(int j=0; j<size - i; j++)
{
if(compareNumbers(&array[j], &array[j+1]) == 1)
{
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
}
'if (record! = NULL)' '{...}' 'else if (запись == NULL)' '{...}' 'else' является просто исчерпывающей и неправильной конструкцией. –
Пожалуйста, не удаляйте вопрос и не публикуйте его повторно; отредактируйте свой вопрос, чтобы добавить дополнительные детали, если это необходимо. –
'int compareNumbers (const void * a, const void * b)' Прекратить использование 'void *'. Используйте фактические типы ('Binding *'). – PaulMcKenzie