Форум программистов, компьютерный форум CyberForum.ru

QSort для строк - C++

Восстановить пароль Регистрация
 
Rengen
3 / 3 / 0
Регистрация: 15.01.2012
Сообщений: 67
15.12.2012, 22:10     QSort для строк #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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
void SAlphabetSort(char* String, int iLo, int iHi)      //Алгоритм Хоара
{
    //границы подмножества
    int Lo = iLo;
    int Hi = iHi;
 
    while(*(String + Hi) == ' ' || *(String + Hi) == '\0' || *(String + Hi) == '\n')        //поиск конца слова
        if(Hi)      //выбор слова в правом подмножестве
            Hi--;
    while(*(String + Hi) != ' ' && *(String + Hi) != '\0' && *(String + Hi) != '\n')        //пропуск слова
        Hi--;
    Hi++;       //Установить на начало слова.
 
    while(*(String + Lo) == ' ' || *(String + Lo) == '\0' || *(String + Lo) == '\n')        //поиск начала слова
        Lo++;   //выбор начала слова левого подмножества
 
    int MidWord = Lo;
    while(*(String + MidWord) != ' ' && *(String + MidWord) != '\0' && *(String + MidWord) != '\n')     //пропуск слова
        MidWord++;
    while(*(String + MidWord) == ' ' || *(String + MidWord) == '\0' || *(String + MidWord) == '\n')     //поиск начала слова
        MidWord++;      //выбор слова для сравнения
    do
    {
        //поиск слова ближайшего к началу
        while(!cmpWordsinString(String, MidWord, Lo))
        {
            while(*(String + Lo) != ' ' && *(String + Lo) != '\0' && *(String + Lo) != '\n')        //поиск следующего слова
                Lo++;
            while(*(String + Lo) == ' ' || *(String + Lo) == '\n')      //поиск начала слова
                Lo++;   //выбор начала слова левого подмножества
        }
        //поиск слова ближайшего к концу
        while(cmpWordsinString(String, MidWord, Hi))
        {
            if(Hi)
                Hi--;
            else
                break;
            while(*(String + Hi) == ' ' || *(String + Hi) == '\n')      //пропуск пробелов
                if(Hi)  
                    Hi--;
                else
                    break;
            while(*(String + Hi) != ' ' && *(String + Hi) != '\0' && *(String + Hi) != '\n')        //поиск начала слова
                if(Hi)      //выбор слова в правом подмножестве
                    Hi--;
                else
                    break;
            if(Hi)
                Hi++;   //Установить на начало слова.
        }
        if(Lo <= Hi)        //если слова найдены
        {
            ExchangeWords(String, Lo, Hi);  //поменять слова местами
            while(*(String + Lo) != ' ' && *(String + Lo) != '\0' && *(String + Lo) != '\n')        //поиск начала слова
                Lo++;   //выбор следующего слова левого подмножества
            Lo++;
            Hi--;
            while(*(String + Hi) == ' ' || *(String + Hi) == '\n')      //пропуск пробелов
                if(Hi)  
                    Hi--;
                else
                    break;
            while(*(String + Hi) != ' ' && *(String + Hi) != '\0' && *(String + Hi) != '\n')        //поиск начала слова
                if(Hi)      //выбор слова в правом подмножестве
                    Hi--;
                else
                    break;
            if(Hi)
                Hi++;       //Установить на начало слова.
        }
    }while(Lo <= Hi);
    if(GetWordsNumber(String) <= 2)
        return ;
    //вызов для левой части множества
    if(Hi > iLo) 
        SAlphabetSort(String + iLo, 0, Hi - iLo);
    //вызов для правой части множества
    if(Lo < iHi) 
        SAlphabetSort(String + Lo, 0, iHi - Lo);
}
Я бы и по другому справился, однако в задании необходимо использовать рекурсивный метод сортировки.
Сам знаю, где-то накосячил, однако дебаг уже не помогает. Буду очень признателен за подсказку или решение проблемы.
Вложения
Тип файла: rar BAaP_LB6.rar (767.4 Кб, 2 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2012, 22:10     QSort для строк
Посмотрите здесь:

C++ Qsort
C++ qsort
C++ Функция qsort для сортировки массивов структур
qsort C++
C++ Проблемы с приведением типов для компоранда для qsort
шаблон функции сравнения для qsort() C++
qsort для структуры C++
Qsort для массива структур C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 01:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru