Я пытаюсь написать код для Bucketsort, который использует массив связанных списков.Проблема в том, что я не уверен, как правильно реализовать связанные списки.Следующий код сначала создает массив в int main (), который вводит ряд элементов, которые будут отсортированы с помощью Bucketsort.В Bucketsort функция должна была создать массив связанных списков, которые служат в качестве блоков.Элементы массива вставляются в каждый сегмент для сортировки с использованием сортировки вставками, а затем элементы объединяются и копируются обратно в исходный массив.Код, который я написал для функции Bucketsort, не соответствует остальному коду.
#include <iostream>
using namespace std;
struct Node
{
int data;
Node *next;
};
struct Node *insertionsort(struct Node*list) {
int j,v,key;
for (j = 2; j < sizeof B; j++){
key = B[j];
v = j - 1;
while (v > 0 && B[v] < key) {
B[v + 1] = B[v];
v = v - 1;
B[v + 1] = key;
}
}
}
void bucketsort(int* arr){
int n = sizeof arr; //determine size of arr
struct Node** B //create an array of arr pointers
// allocate memory for array of pointers to buckets
b = (struct Node **)malloc(sizeof(struct Node*) * n;
//initialize all linked lists in B to NULL
for (int i = 0; i < n-1; i++){
B[i] = NULL;
}
//insert arr[i] into list B[n*arr[i]]
for (int i = 1; i < n; i++){
Node->data = arr[i];
Node->next = B[i];
B[i] = Node;
}
//sort list B[i] using insertion sort
for (int i = 0; i < n-1; i++){
insertionsort(B[i]);
}
//concatenate all buckets into arr[]
int index = 0;
for (int i = 0; i < sizeof arr; i++){
for (int j = 0; j < sizeof B[i]; j++){
arr[index++] = B[i][j];
}
}
}
int main(){
//establish array and the value to be searched
int len;
// cout << "Enter the size of the array: ";
cin >> len;
int* arr = new int[len];
int arri;
// cout << "Enter the values of the array: ";
for (int i = 0; i <= len; i++) {
cin >> arri;
arr[i] = arri;
}
bucketsort(arr);
for (int i = 0; i <= len; i++) {
cout << arr[i] << ";";
}
return 0;
}