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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Rengen
3 / 3 / 0
Регистрация: 15.01.2012
Сообщений: 67
#1

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

15.12.2012, 22:10. Просмотров 463. Ответов 0
Метки нет (Все метки)

Работает не верно. Нельзя использовать стркутуры, классы.
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 для строк
Посмотрите здесь:

Проблемы с приведением типов для компоранда для qsort - C++
Вот так всё ок (во всяком случаи компилятор не выдвинул никаких предупреждений): int comp(const void* i, const void* j) { Worker*...

qsort для структуры - C++
Хочу отсортировать массив вот такой вот структуры struct S1 { char Word; char Eng2; char Eng1; char Fr; friend istream&amp;...

Qsort для массива структур - C++
Да, знаю, что таких тем на форуме уже полно, как и кода, но смысл мне всё равно непонятен. Есть массив таких рёбер: struct edge{ int...

Шаблон функции сравнения для qsort() - C++
Хочу отсортировать массив из int и из double с помощью qsort(). Для этого необходимо определить функцию сравнения элементов. Думал...

Функция qsort для сортировки массивов структур - C++
В общем есть структура struct User { int id; char nickname; int karma; };

qsort - C++
Вот код: #include &lt;cstdio&gt; #include &lt;algorithm&gt; int compare(const void *s1, const void *s2) { return strcmp((char *)s1, (char...

не работает qsort - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;iomanip&gt; #include &lt;string.h&gt; using namespace std; struct MARSH { char...

сортировка qsort - C++
Есть динамический массив, содержащий строки в строках слова, формат такой аа бб вв гг Как сделать сортировку по алфавиту этого...

Функция qsort - C++
Здравствуйте! Помогите пожалуйста отсортировать студентов с помощью функции qsort по &quot;age&quot; или другим критериям. Спасибо! #include...

Vector and qsort - C++
Здравствуйте, есть код: #include &quot;iostream&quot; #include &quot;vector&quot; using namespace std; int compare (const void * a, const void *...


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

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

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