Я на самом деле реализую функцию перетасовки с функцией перетасовки.Я использую алгоритм Фишера-Йейтса с генератором псевдослучайных чисел с фиксированным начальным числом.Однако не перетасованная строка не похожа на исходную.
Я проверил, совпадает ли мой случайный массив в функции перетасовки и функции перестановки.Функция перестановки аналогична функции перестановки, но в обратном порядке.
Вот моя функция перетасовки:
void shuffle(char * phrase)
{
int size_phrase = strlen(phrase);
srand(seed);
int * rdm_array = (int*)malloc(sizeof(int)*size_phrase);
int i;
for(i = 0; i < size_phrase; i++)
{
rdm_array[i] = rand()%size_phrase;
//printf("%d", rdm_array[i]);
}
//begin shuffle here
int j;
int k = 0;
for(j = size_phrase -1 ; j > 0 ; j-- , k++)
{
int rdm_nb = rdm_array[k];
char temp = phrase[j];
phrase[j] = phrase[rdm_nb];
phrase[rdm_nb] = temp;
}
free(rdm_array);
}
А вот моя функция перетасовки:
void unshuffle(char * phrase)
{
int size_phrase = strlen(phrase);
srand(seed);
int * rdm_array = (int*)malloc(sizeof(int)*size_phrase);
int i;
for(i = 0; i < size_phrase; i++)
{
rdm_array[i] = rand()%size_phrase;
//printf("%i", rdm_array[i]);
}
//On commence le mélange ici
int j;
int k = size_phrase-1;
for(j = 0 ; j < size_phrase ; j++ , k--)
{
int rdm_nb = rdm_array[k];
char temp = phrase[j];
phrase[j] = phrase[rdm_nb];
phrase[rdm_nb] = temp;
}
free(rdm_array);
}
И вот мой вывод:
Похоже, что отсутствует один цикл или что-то в этом роде.