Реализация Radix sort c ++

У меня возникли проблемы при попытке реализовать сортировку по системе счисления. Это задание, и мой профессор даже не желает указывать мне правильное направление. Я давно смотрю на этот код. Может кто-нибудь объяснить мне, почему мои указатели не работают? Я провел некоторую проверку и увидел, что мой указатель даже не указывает на следующий указатель, и я очень смущен, почему. Я не прошу кого-либо выполнять мое задание, просто какое-то направление.

#include <iostream>
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

#define COLUMN 10

using namespace std;


struct List{
    int data;
    List *p;
};
struct node{
    int len = 0;
    List *p = NULL;
};

void printList(int list[], int len){
    for (int i = 0;i<len;i++){
         cout <<list[i] << " ";
    }
    cout << "\n";
}

void deleteList(node columns[], int len){
    for (int j =0; j<COLUMN;j++){
        List *curr;
        List *prev;
        curr = columns[j].p;
        for (int i = 0; i<len;i++){
            prev = curr;
            curr = curr->p;
            delete prev;
        }
        delete curr;
    }
}

void overrideArray(node columns[], int a[], int len){
    int k = 0; List *curr;
    for (int i = 0;i<COLUMN,k<len;i++){
        int len = columns[i].len;
        cout << len << " length"<< endl;
        curr =columns[i].p;
        for (int j = 0;j<len;j++){
            cout << "plue\n";
            if (len == 0) continue;
            cout << k <<" plue2\n";
            a[k]=curr->data;
            cout << "plue3\n";
            cout << a[k] << " value";
            curr = curr->p;
            k++;
        }
    }
    printList(a,len);
}
int main(){
    srand(time(NULL));
    int length = 10, m,n,i;
    node *columns = new node[COLUMN];
    List * curr;
    int *a = new int [length];
    for (int i = 0;i<length;i++){
        a[i] = 2;
    }
    printList(a,length);
    m = 10; n = 1; i =0;
    while(columns[0].len!=length){
        int loc = (a[i]%m)/n;
        //cout << loc << endl;
        curr = columns[loc].p;
        while(curr != NULL){
            //cout << "here" << endl;
            curr = curr->p;
            //cout << curr->data << endl;
        }
        curr = new List;
        cout << curr->p << endl;
        curr->data = a[i];
        cout << curr->p << endl;
        columns[loc].len++;
        i++;
        if (i == length-1){
            overrideArray(columns,a,length);
            cout << "here5\n";
            deleteList(columns,length);
            cout << "here6\n";
            i = 0;
            m *= 10;
            n*=10;
        }

}
overrideArray(columns,a,length);
printList(a,length);
return 0;
}

person user2079902    schedule 05.02.2014    source источник
comment
одна вещь, которая сразу бросается в глаза: i<COLUMN,k<len в вашем цикле for. Оператор запятой заставляет первое из этих выражений (i<COLUMN) игнорироваться; только k<len почитается. Совершенно уверен, что вы имели в виду i<COLUMN && k<len. Кроме того, ваш внутренний цикл for заставит k выйти за границы a[] и перейти к неопределенному поведению в процессе. И if (len == 0) бесполезен, поскольку цикл j не будет выполняться в теле, если это правда. Пора пересмотреть свой алгоритм.   -  person WhozCraig    schedule 05.02.2014
comment
Для реализации сортировки по основанию может быть интересен этот ответ: stackoverflow.com/a/1271587/26070   -  person mr_georg    schedule 05.02.2014