Sách tôi đã nói điều này:Viết xô sắp xếp theo C++
a) Đặt mỗi giá trị của mảng một chiều vào một hàng của dãy nhóm dựa trên chữ số của giá trị đó. Ví dụ, 97 được đặt trong hàng 7, 3 được đặt trong hàng 3, và 100 được đặt trong hàng 0. Đây được gọi là "thẻ phân phối".
b) Lặp qua hàng loạt hàng loạt theo hàng và sao chép các giá trị trở lại mảng ban đầu. Đây được gọi là "thu thập mật khẩu". Thứ tự mới của các giá trị trước đó trong mảng một chiều là 100, 3 và 97.
c) Lặp lại quy trình này cho từng vị trí chữ số tiếp theo.
Tôi gặp rất nhiều khó khăn khi cố gắng hiểu và triển khai điều này. Cho đến nay tôi có:
void b_sort(int sarray[], int array_size) {
const int max = array_size;
for(int i = 0; i < max; ++i)
int array[i] = sarray[i];
int bucket[10][max - 1];
}
Tôi đang nghĩ rằng để sắp xếp chúng theo những người thân, hàng chục, hàng trăm, vv, tôi có thể sử dụng này:
for(int i = 0; i < max; ++i)
insert = (array[i]/x) % 10;
bucket[insert];
trong đó x = 1, 10, 100, 1000, vv. Tôi hoàn toàn bị mất về cách viết này ngay bây giờ.
'int get_digit (int number, int chữ số) {return số/int ((std :: pow (10,0, chữ số))% 10;} ' –
Điều đó sẽ làm việc tốt, giả sử x == 1, 10, 100, .... –
Bạn có thể muốn sử dụng chữ số thập phân, chứ không phải chữ số thập phân: Dịch chuyển bằng 4 * n bit và AND với 0xf có vẻ tự nhiên hơn nhiều so với việc sử dụng phép tính modulo –