01/10/2018, 13:38
Cấn giúp đỡ viết lại hàm shuffle trong C++ bằng ngôn ngữ C
Em đang code C, mà đến chỗ cần một hàm cõ chức năng như hàm shuffle mà em nghĩ mãi không ra, anh chỉ biết có thể hướng dẫn cho em được không ạ.
Đây là source code C++
template <class RandomAccessIterator, class RandomNumberGenerator>
void random_shuffle (RandomAccessIterator first, RandomAccessIterator last,
RandomNumberGenerator& gen)
{
iterator_traits<RandomAccessIterator>::difference_type i, n;
n = (last-first);
for (i=n-1; i>0; --i) {
swap (first[i],first[gen(i+1)]);
}
}
nhưng em khong hiểu và không chuyển về C được.
Em cám ơn ạ.
Bài liên quan
Ở đây họ dùng template để không phải overload.
Hàm shuffer này cũng chỉ có tác dụng với số thực/nguyên/char mà thôi.
Để đơn giản hoá thì bạn có thể viết lại cho từng kiểu dữ liệu khác nhau qua overload function.
Thuật toán của họ là cài đặt hàm nhận vào 3 con trỏ trên C
Việc còn lại thì bạn chỉ cần đọc bên trong là hiểu họ làm thế nào rồi.
(Bạn nên xem cả hàm cài đặt sinh số ngẫu nhiên của họ để tránh swap phải giá trị ngoài vùng nhớ của mảng)
Cái này gọi là Knuth shuffle
em cám ơn anh ạ.!!!
em cám ơn anh!!!