Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
TGrey[WoLf]
41 / 41 / 4
Регистрация: 14.09.2008
Сообщений: 683
1

Алгоритм сортировки

17.01.2009, 15:05. Просмотров 1608. Ответов 9
Метки нет (Все метки)

Здравствуйте, подскажите пожалуйста какой алгоритм можно использовать при решении такой задачи:
Дана строка char * из букв и цифр разделенных пробелами, нужно отсортировать слова в алфавитном порядке при этом цифры не учитывать.
К примеру
p2og3oda 2bu7la h9oros6hey6
Должно получится
2bu7la h9oros6hey6 p2og3oda
Код не вылаживаю т.к. не придумал, как делать(
Прошу писать не код, а алгоритм.
Спасибо.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2009, 15:05
Ответы с готовыми решениями:

Алгоритм сортировки
пацаны ребята помогите, реализовал два алгоритма на C++, алгоритм сортировки...

Алгоритм сортировки
Дан одномерный масив. мне в нем нужно отсортировать по возростанию только те...

Алгоритм сортировки
учитель попросил написать сортировку массива по возрастанию в общем виде ...

Алгоритм сортировки Шелла
http://lord-n.narod.ru/download/books/walla/programming/Spr_po_C/21/2107.htm ...

Не работает алгоритм сортировки
Не работает алгоритм сортировки Ни при заполнении псевдослучайными числами,ни...

9
Фенрир
42 / 38 / 12
Регистрация: 05.01.2009
Сообщений: 394
17.01.2009, 15:20 2
дял начала раздели предложение на лексемы используя strtok например, и сохрани слова в строковом массиве.
затем напиши функцию сравнения слов, чтото вроде
C++
1
2
3
4
5
int Compare (const char* str1, const char* str2)
{    while(isdigit(*str1)) {str1++;}
      while (isdigit(*str2)) {str2++;}
      return (*str1>*str2); // тоесть настрой указаетли на первые буквы и сравни их
 }
Затем используй алгоритм сортировки, который будет использовать функцию сравнения....как-то так
0
TGrey[WoLf]
41 / 41 / 4
Регистрация: 14.09.2008
Сообщений: 683
17.01.2009, 17:03  [ТС] 3
Через 1 место вышел у меня такой код))) Он сортирует слова по алфавиту, но учитывает только первые буквы + не учитывает цифры, доделаю.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
    char a[50], tmp[20]; 
    strcpy(a,phrase);
    int c=0, cw=0;
 
    for(int l=1; l < strlen(phrase); l++)
        if( phrase[l] == ' ' && phrase[l+1] != ' ' && phrase[l+1] != '\0' )
            cw++;
 
    ++cw;
    cout<<"Words:"<<cw<<endl;
    char **words;
    words = new char*[cw];
 
    for(int i = 0; i < (cw); i++)
        words[i] = new char[20];
 
 
 
    char *ans = strtok(a," ");
    while( ans != NULL )
    {
        cout<<ans<<endl;
        strcpy(words[c++],ans);
        ans = strtok(NULL," ");
    }
 
    for(i=0; i < cw-1; i++)
    {
        for(int j=i+1; j < cw; j++)
        if(words[i][0] > words[j][0])
        {
            strcpy(tmp, words[i]);
            strcpy(words[i],words[j]);
            strcpy(words[j],tmp);
        }
    }
 
    for(i=0; i < cw; i++)
        cout<<words[i]<<" ";
    cout<<endl;
 
 
 
    for(i = 0; i < cw; i++)
        delete [] words[i];
    delete []words;
В результате:
den ochen bul aoroshim
<=>
aoroshim bul den ochen
0
Фенрир
42 / 38 / 12
Регистрация: 05.01.2009
Сообщений: 394
17.01.2009, 17:21 4
C++
1
2
3
4
// вместо
if(words[i][0] > words[j][0])
// используй... функцию не проверял....наверно в не кажый раз нужно указатель //устанавливать в начало
if (Compare(words[i], words[j]))
0
TGrey[WoLf]
41 / 41 / 4
Регистрация: 14.09.2008
Сообщений: 683
17.01.2009, 20:16  [ТС] 5
Что-то я не нашел прототипа этой функции
0
Фенрир
42 / 38 / 12
Регистрация: 05.01.2009
Сообщений: 394
17.01.2009, 20:51 6
C++
1
2
3
4
5
6
7
8
9
  
int Compare (const char* str1, const char* str2)   
{    
     char* a = &str1[0];
     char* b = &str2[0];
     while(isdigit(*a)) a++;   
      while (isdigit(*b)) b++;
      return (*a>*b); // тоесть настрой указаетли на первые буквы и сравни их   
 }
0
TGrey[WoLf]
41 / 41 / 4
Регистрация: 14.09.2008
Сообщений: 683
17.01.2009, 21:28  [ТС] 7
Что-то я не пойму этот код. Зачем в цикле увеличивать указатели? Я же только по первой букве сравниваю. и тогда по моему проще сравнить моим способом чем делать эту функцию. Или я что-то недопонял?
0
accept
4833 / 3255 / 455
Регистрация: 10.12.2008
Сообщений: 10,569
17.01.2009, 21:36 8
p2og3oda 2bu7la h9oros6hey6
это три структуры такого вида

Код
struct {
    char *input;
    char *modif;
};
в input кладётся само слово, а в modif выборка символов алфавита
потом проводится обычная пузырьковая сортировка со strcmp всех структур по полю modif а затем сохранение полей input из получившегося порядка
0
Фенрир
42 / 38 / 12
Регистрация: 05.01.2009
Сообщений: 394
17.01.2009, 21:40 9
ты ж сравниваешь имено 1е буквы
тоесть например
2222222bbbb надо поменять местами c 2222aaaaa поэтому при сравнении надо добраться до букв игнорируя цифры..так??

Добавлено через 1 минуту 9 секунд
или вариант который accept предложил.
0
TGrey[WoLf]
41 / 41 / 4
Регистрация: 14.09.2008
Сообщений: 683
18.01.2009, 01:12  [ТС] 10
Ааа извиняюсь, я перепутал значения isdigit я подумал, что она возвращает истину если это Буква, а не цифра. Теперь ясно. Да спасибо за советы. Доделаю выложу, мб кому когда-нибудь понадобится.
0
18.01.2009, 01:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2009, 01:12

Алгоритм плавной сортировки (C++ -> Си)
static void SmoothSort(String Aarg, const int N) { int temp; A = Aarg; q...

Алгоритм сортировки,ошибка!
У меня алгоритм сортировки вставками но вот только не сортирует почему то ...

Реализовать алгоритм сортировки
На рисунке расположены, все возможные компоненты имеющие свойства x,y. Размер...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru