Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Алгоритм

2.0K
28 апреля 2003 года
udgine
20 / / 04.03.2003
Может не совсем по теме, но все же? Подскажите алгоритм сортировки, ну скажем, фамилий в алфавитном порядке, находящихся в файле в разброс. Но сортировка должна быть не физическая, а скажем так по индексу, т.е. я создаю в памяти дерево, а потом сортирую его значения в алфавитном порядке, а вот как отсортировать эти фамилии по алфавиту я не знаю!
319
28 апреля 2003 года
xelos
577 / / 27.02.2003
Цитата:
Originally posted by udgine
Может не совсем по теме, но все же? Подскажите алгоритм сортировки, ну скажем, фамилий в алфавитном порядке, находящихся в файле в разброс. Но сортировка должна быть не физическая, а скажем так по индексу, т.е. я создаю в памяти дерево, а потом сортирую его значения в алфавитном порядке, а вот как отсортировать эти фамилии по алфавиту я не знаю!



самый простой алгоритм сортировки - "воздушные шарики"
начинаешь просмотр файла с нулевой позиции, если следующая запись за текущей "лучше" текущей, то меняешь местами записи и начинаешь просмотр опять с нуля (или смотришь назад, т.е. поднимаешь ее до позиции, где предыдущая запись "лучше" текущей - это модификация базового алгоритма). Если доходишь до конца файла, то сортировка выполнена. Слова кодируешь, например, в 33-базовой форме (русский алфавит) и просто сравниваешь два числа. А вообще, по-моему, есть классы сортировки.

3.5K
28 апреля 2003 года
shadowmaan
20 / / 24.04.2003
Цитата:
Originally posted by xelos


самый простой алгоритм сортировки - "воздушные шарики"
начинаешь просмотр файла с нулевой позиции, если следующая запись за текущей "лучше" текущей, то меняешь местами записи и начинаешь просмотр опять с нуля (или смотришь назад, т.е. поднимаешь ее до позиции, где предыдущая запись "лучше" текущей - это модификация базового алгоритма). Если доходишь до конца файла, то сортировка выполнена. Слова кодируешь, например, в 33-базовой форме (русский алфавит) и просто сравниваешь два числа. А вообще, по-моему, есть классы сортировки.



А что означает "Слова кодируешь, например, в 33-базовой форме (русский алфавит)"?

319
28 апреля 2003 года
xelos
577 / / 27.02.2003
Цитата:
Originally posted by shadowmaan

А что означает "Слова кодируешь, например, в 33-базовой форме (русский алфавит)"?



Типа буковка а=1, буковка б=2, тогда аа=1,1 , аб=1,2, для проверки кто больше, кто меньше умножаешь позицию буковки на 33 и суммируешь с остальными - стандартное преобразование баз (как из десятичной базы в шестнадцатиричную, только с количеством букв 33).

442
29 апреля 2003 года
HexoGenus
121 / / 20.03.2000
Цитата:
Originally posted by xelos


Типа буковка а=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 можно просто в условии сравнивать...
в визуале разве нет похожего класса для работы со строками?

если выражал мысли несколько сумбурно извините... время позднее... если что непонятно завтра допишу :)

3
29 апреля 2003 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by HexoGenus


Круто...
А зачем?
разве коды букв не являются числами?
разве буквы нельзя просто поочередно сравнивать никуда не преобразовывая?

Кстати что вы в вашем примере будете делать с маленькими и большими буквами?

или с дефисами? Кстати знаете откуда слово алгоритм произошло ? от фамилии с дефисом :)
аль-Хорезми

Этот метод сортировки официально называется не метод "воздушные шарики" а метод пузырьковой сортировки :)

Кстати вот примерчик сортировки букв в строке в алфавитном порядке (только извините с использованием неродного для с++ типа 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

3.5K
29 апреля 2003 года
shadowmaan
20 / / 24.04.2003
Цитата:
Originally posted by Green


Извините, а кто Вам сказал, что тип (точнее класс) string является "неродным для с++" ? Что именно Вы подразумевали под словом "неродной"? Если уж STL для С++ неродная, тогда он уж совсем сирота...:D



Да нет же. HexoGenus говорил не о string, который из STL, а о String, который из VCL (Borland C++ Builder). В MFC это был бы CString.

319
29 апреля 2003 года
xelos
577 / / 27.02.2003
Цитата:
Originally posted by Green


Извините, а кто Вам сказал, что тип (точнее класс) string является "неродным для с++" ? Что именно Вы подразумевали под словом "неродной"? Если уж STL для С++ неродная, тогда он уж совсем сирота...:D



Я общий алгоритм привел, без привязки к какому-нибудь языку, сорри, если что не так.
а с заглавными буквами - все переводить в один регистр.

3
29 апреля 2003 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by xelos


Я общий алгоритм привел, без привязки к какому-нибудь языку, сорри, если что не так.
а с заглавными буквами - все переводить в один регистр.



Ок. Я пропустил, что там String с большой буквы...
Достаточно в Вашем примере заменить заглавные буквы в String и Length, и это уже будет string из STL.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог