ich die normale Radix Sort implementiert haben:Holleriths Radixsort
#include <iostream>
using namespace std;
void print(int arr[], int n) {
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
}
int findMax(int arr[], int n) {
int mx = 0;
for (int i = 0; i < n; i++) {
if (arr[i] > mx)
mx = arr[i];
}
return mx;
}
void countingSort(int arr[], int n, int exp) {
int output[n];
const int m = findMax(arr, n) + 1;
int C[m];
for (int i = 0; i < m; i++) {
C[i] = 0;
}
for (int i = 0; i < n; i++)
C[(arr[i]/exp) % 10]++;
for (int i = 1; i < 10; i++)
C[i] += C[i - 1];
for (int i = n - 1; i >= 0; i--) {
output[C[(arr[i]/exp) % 10] - 1] = arr[i];
C[(arr[i]/exp) % 10]--;
}
for (int i = 0; i < n; i++)
arr[i] = output[i];
}
void radixSotr(int arr[], int n) {
int m = findMax(arr, n);
for (int exp = 1; m/exp > 0; exp *= 10) {
countingSort(arr, n, exp);
}
}
int main() {
int n;
cout << "Enter the number of elements: ";
cin >> n;
int arr[n];
cout << "Enter the elements of the array: ";
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
cout << endl;
cout << "Unsorted version of the array: " << endl;
print(arr, n);
cout << endl;
cout << "Sorted version of the array: " << endl;
radixSotr(arr, n);
print(arr, n);
return 0;
}
Jetzt versuche ich, Hollerith-Version von Radix Sort zu implementieren, wobei die Radixsort mit dem höchstwertigen Bit beginnt und breitet sich iterativ zu dem niedrigstwertigen Bit. Könntest du mir irgendwelche Ideen geben, wie ich meinen Code ändern kann, weil ich feststecke?
ich Ihre zuletzt rückgängig gemacht, Sie sind nicht den Code in der Frage aus den Kommentaren und Antworten soll beheben, macht es die Diskussion inkonsistent. Sie können die Frage mit ** EDIT ** -Absätzen am Ende des Posts hinzufügen, um weitere Informationen zu erhalten. – chqrlie
Wie von Chqlrie beantwortet, ist Hollerith die niedrigste Ziffer zuerst. So wurden die alten Kartensortierer verwendet. Der größte Wert erzeugt zuerst ein Problem, da die Eimer nach jedem Durchlauf nicht kombiniert werden können, dh 10 Eimer nach dem ersten Durchlauf, 100 Eimer nach dem zweiten Durchlauf, 1000 Eimer nach dem dritten Durchlauf, .... – rcgldr
Tatsächlich finde ich es schrecklich, dass Leute "Absätze bearbeiten" hinzufügen, anstatt die ursprüngliche Frage der Klarheit halber neu zu formulieren, @chqrlie. Ich glaube auch, dass es so ist, wie es sein sollte. Haben Sie also ein Backup für Ihre Version?Natürlich ist das Beheben des fehlerhaften Codes, also eine Antwort ohne Frage, schlecht, das streite ich nicht! –