Bucketsort со связанными списками - PullRequest
0 голосов
/ 14 октября 2018

Я пытаюсь написать код для 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;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...