2012-12-30 3 views
-4

J'ai écrit ce code pour implémenter l'algorithme de tri de la base lsd pour les chaînes.LSD radix sort C++ code

Logique: Nous commençons par le premier caractère et le premier tri appliqué à ce chiffre. Ensuite, nous passons au chiffre suivant à gauche et ainsi de suite. count[] contient la fréquence de chaque alphabet anglais à une position numérique particulière. count[1] représente la fréquence de 'a', count[2] de 'b' ... ainsi de suite ... et count[0]=0. Ensuite, nous calculons le nombre cumulé. Maintenant, nous parcourons à nouveau le tableau de chaînes et calculons la position appropriée dans le tableau aux. par exemple: si count[2] = 4 et count[1]=1 pour une position de chiffre particulière, cela signifie que les mots avec 'b' à cette position occuperont aux[1], aux[2], aux[3].

#include<iostream> 
#include<string> 
using namespace std; 

int main() 
{ 
string arr[]={"dab","cab","fad","bad","dad","ebb","ace","add","fed","bed","fee","bee"}; 
string aux[12]={"dab","cab","fad","bad","dad","ebb","ace","add","fed","bed","fee","bee"}; 

int count[27]={0}; 
for(int i=2;i>=0;i--) 
{ 
for(int j=0;j<12;j++) 
count[static_cast<int>(arr[j][i])-64]++; 
cout<<"here"<<endl; //////////////THIS GETS PRINTED 

for(int j=0;j<26;j++) 
count[j+1]+=count[j]; //calculating cumulative value 
cout<<"HERE"<<endl; ///////////////THIS GETS PRINTED 

for(int j=0;j<12;j++) 
{ 
int x=count[static_cast<int>(arr[j][i])-65]; //65 because positions for 'a' will be 
              //determined by count[0], for 'b' will be 
              // determined by count[1] etc. 
aux[x]=arr[j]; 
cout<<j<<endl; //even j=0 doesn't get printed 
count[static_cast<int>(arr[j][i])-65]++; 
} 

cout<<"here"<<endl; 

for(int j=0;j<12;j++) 
cout<<aux[j]<<endl; 
} //i governs which digit is being compared 

return 0; 
} 

Le code donne après l'impression segfault ici et ICI. Le problème est dans la troisième boucle 'for j'. Quelqu'un peut-il identifier le problème?

+0

S'il vous plaît fixer indentation ... – hyde

Répondre

0

Il y avait une petite erreur ... Je 65 qui est la soustraction ascii pour 'A' et non 'a'