У меня есть эта функция называется WordSort (worddata W [], int count), которая подается две переменные
1 — worddata — массив, содержащий информацию о данном слове в файле. count это просто переменная счетчика, чтобы увидеть, какое слово в массиве мы ищем.
файл words.txt, который читается в этой программе, будет просто строкой слов.
this is a list of words
there are letters and numbers
23 people recommend this program.
Вот функция:
void WordSort (worddata W [], int count)
{
for (int i=1; i < count; i++)
{
for (int j=i; j > 0 && W[j-1].word > W[j].word; j--)
{
Swap(W[j], W[j-1]);
}
}
}
Предполагается, что функция swap меняет каждый элемент на предыдущий, если j> 0 или список окончен. Я запутался в том, как завершить функцию подкачки, вот пример, который мне дали.
void Swap (worddata & a, worddata & b)
{
int += a;
a = b;
b =+;
}
Поменять местами каждый элемент с предыдущим
Я думаю, что функция WordSort работает нормально, единственное, чего не хватает, так это функции Swap. Может кто-нибудь указать мне правильное направление или объяснить мне сортировку вставок лучше?
Своп должен выглядеть следующим образом — я понятия не имею, как ваш пример даже близок.
void Swap (worddata & a, worddata & b)
{
worddata temp = a;
a = b;
b = temp;
}
Использовать стандартную библиотеку станд :: своп вместо. В вашем цикле:
for (...)
{
std:swap(W[j], W[j-1]);
}
std :: swap требует, чтобы класс worddata имел конструктор копирования и оператор присваивания, заданный явно или неявно.
void insertion_sort()
{/* Algorithm : Insertion Sort
* Coded by .
*/
int num;
/*
* Asking the User no of Integers he/she wants to enter
*/
cout << "Enter no of integers u want to enter: ";
cin >> num;
/* Creating an Array to store the integers*/
int s[num];
/*Taking Integers from the User */
for(int i = 0 ; i < num ; i++)
{
cout << "Integer " << i+1 << " is : ";
int x;
cin >> x;
s[i] = x;
}
/* The Magic of INSERTION SORT */
for(int j = 1 ; j <= (num-1) ; j++)
{
int key = s[j];
int k = j-1;
while(k >=0 && key <= s[k])
{
s[k+1] = s[k];
k = k - 1;
}
s[k+1]=key;
}
/*Printing Out the Sorted List */
cout << "The Sorted List is \n\n";
for(int i = 0 ; i < num ; i++)
{
cout << s[i] << " ";
}
}