Алгоритм
Может не совсем по теме, но все же? Подскажите алгоритм сортировки, ну скажем, фамилий в алфавитном порядке, находящихся в файле в разброс. Но сортировка должна быть не физическая, а скажем так по индексу, т.е. я создаю в памяти дерево, а потом сортирую его значения в алфавитном порядке, а вот как отсортировать эти фамилии по алфавиту я не знаю!
самый простой алгоритм сортировки - "воздушные шарики"
начинаешь просмотр файла с нулевой позиции, если следующая запись за текущей "лучше" текущей, то меняешь местами записи и начинаешь просмотр опять с нуля (или смотришь назад, т.е. поднимаешь ее до позиции, где предыдущая запись "лучше" текущей - это модификация базового алгоритма). Если доходишь до конца файла, то сортировка выполнена. Слова кодируешь, например, в 33-базовой форме (русский алфавит) и просто сравниваешь два числа. А вообще, по-моему, есть классы сортировки.
самый простой алгоритм сортировки - "воздушные шарики"
начинаешь просмотр файла с нулевой позиции, если следующая запись за текущей "лучше" текущей, то меняешь местами записи и начинаешь просмотр опять с нуля (или смотришь назад, т.е. поднимаешь ее до позиции, где предыдущая запись "лучше" текущей - это модификация базового алгоритма). Если доходишь до конца файла, то сортировка выполнена. Слова кодируешь, например, в 33-базовой форме (русский алфавит) и просто сравниваешь два числа. А вообще, по-моему, есть классы сортировки.
А что означает "Слова кодируешь, например, в 33-базовой форме (русский алфавит)"?
А что означает "Слова кодируешь, например, в 33-базовой форме (русский алфавит)"?
Типа буковка а=1, буковка б=2, тогда аа=1,1 , аб=1,2, для проверки кто больше, кто меньше умножаешь позицию буковки на 33 и суммируешь с остальными - стандартное преобразование баз (как из десятичной базы в шестнадцатиричную, только с количеством букв 33).
Типа буковка а=1, буковка б=2, тогда аа=1,1 , аб=1,2, для проверки кто больше, кто меньше умножаешь позицию буковки на 33 и суммируешь с остальными - стандартное преобразование баз (как из десятичной базы в шестнадцатиричную, только с количеством букв 33).
Круто...
А зачем?
разве коды букв не являются числами?
разве буквы нельзя просто поочередно сравнивать никуда не преобразовывая?
Кстати что вы в вашем примере будете делать с маленькими и большими буквами?
или с дефисами? Кстати знаете откуда слово алгоритм произошло ? от фамилии с дефисом :)
аль-Хорезми
Этот метод сортировки официально называется не метод "воздушные шарики" а метод пузырьковой сортировки :)
Кстати вот примерчик сортировки букв в строке в алфавитном порядке (только извините с использованием неродного для с++ типа String но надеюсь все понятно)
String a;
a=Edit1->Text;
int n=a.Length();
for (int i=2;i<=n;i++)
{
for (int j=i;j>1;j--)
{
if (a[j]<a[j-1])
{
char k=a[j];
a[j]=a[j-1];
a[j-1]=k;
}
else break;
}
}
Edit1->Text=a;
здесь видно и действие пузырькового метода и как можно буквы сравнивать по коду...
кстати две переменные типа String можно просто в условии сравнивать...
в визуале разве нет похожего класса для работы со строками?
если выражал мысли несколько сумбурно извините... время позднее... если что непонятно завтра допишу :)
Круто...
А зачем?
разве коды букв не являются числами?
разве буквы нельзя просто поочередно сравнивать никуда не преобразовывая?
Кстати что вы в вашем примере будете делать с маленькими и большими буквами?
или с дефисами? Кстати знаете откуда слово алгоритм произошло ? от фамилии с дефисом :)
аль-Хорезми
Этот метод сортировки официально называется не метод "воздушные шарики" а метод пузырьковой сортировки :)
Кстати вот примерчик сортировки букв в строке в алфавитном порядке (только извините с использованием неродного для с++ типа String но надеюсь все понятно)
String a;
a=Edit1->Text;
int n=a.Length();
for (int i=2;i<=n;i++)
{
for (int j=i;j>1;j--)
{
if (a[j]<a[j-1])
{
char k=a[j];
a[j]=a[j-1];
a[j-1]=k;
}
else break;
}
}
Edit1->Text=a;
здесь видно и действие пузырькового метода и как можно буквы сравнивать по коду...
кстати две переменные типа String можно просто в условии сравнивать...
в визуале разве нет похожего класса для работы со строками?
если выражал мысли несколько сумбурно извините... время позднее... если что непонятно завтра допишу :)
Извините, а кто Вам сказал, что тип (точнее класс) string является "неродным для с++" ? Что именно Вы подразумевали под словом "неродной"? Если уж STL для С++ неродная, тогда он уж совсем сирота...:D
Извините, а кто Вам сказал, что тип (точнее класс) string является "неродным для с++" ? Что именно Вы подразумевали под словом "неродной"? Если уж STL для С++ неродная, тогда он уж совсем сирота...:D
Да нет же. HexoGenus говорил не о string, который из STL, а о String, который из VCL (Borland C++ Builder). В MFC это был бы CString.
Извините, а кто Вам сказал, что тип (точнее класс) string является "неродным для с++" ? Что именно Вы подразумевали под словом "неродной"? Если уж STL для С++ неродная, тогда он уж совсем сирота...:D
Я общий алгоритм привел, без привязки к какому-нибудь языку, сорри, если что не так.
а с заглавными буквами - все переводить в один регистр.
Я общий алгоритм привел, без привязки к какому-нибудь языку, сорри, если что не так.
а с заглавными буквами - все переводить в один регистр.
Ок. Я пропустил, что там String с большой буквы...
Достаточно в Вашем примере заменить заглавные буквы в String и Length, и это уже будет string из STL.