diff --git a/c++ bin sort b/c++ bin sort new file mode 100644 index 0000000..7e1c7b3 --- /dev/null +++ b/c++ bin sort @@ -0,0 +1,98 @@ +#include + +using namespace std; + +template +void Print(T& vec, int n, string s){ + cout << s << ": [" << flush; + for (int i=0; i max){ + max = A[i]; + } + } + return max; +} + +// Linked List node +class Node{ +public: + int value; + Node* next; +}; + +void Insert(Node** ptrBins, int idx){ + Node* temp = new Node; + temp->value = idx; + temp->next = nullptr; + + if (ptrBins[idx] == nullptr){ // ptrBins[idx] is head ptr + ptrBins[idx] = temp; + } else { + Node* p = ptrBins[idx]; + while (p->next != nullptr){ + p = p->next; + } + p->next = temp; + } +} + +int Delete(Node** ptrBins, int idx){ + Node* p = ptrBins[idx]; // ptrBins[idx] is head ptr + ptrBins[idx] = ptrBins[idx]->next; + int x = p->value; + delete p; + return x; +} + +void BinSort(int A[], int n){ + int max = Max(A, n); + + // Create bins array + Node** bins = new Node* [max + 1]; + + // Initialize bins array with nullptr + for (int i=0; i