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

Быстрая сортировка - C++

Восстановить пароль Регистрация
 
tofers
 Аватар для tofers
27 / 27 / 2
Регистрация: 07.10.2011
Сообщений: 204
31.03.2012, 11:56     Быстрая сортировка #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
#include <iostream>
#include <conio.h>
#include <stdlib.h> // Отсюда берём rand()
#include <time.h> // Здесь находится time()
#include <string>
 
using namespace std;
 
void QuickSort(int count, int* sArr) 
{
    int i = 0, j = count;
    long  x = sArr[count >> 1 ];
 
    do {
        while (sArr[i] < x) i++;
        while (sArr[j] > x) j--;
 
        if(i <=  j) {
           x = sArr[i]; 
           sArr[i] = sArr[j]; 
           sArr[j] = x;
            i++;
            j--;
        }
    } while (i <= j);
 
    if (i < 0)
        QuickSort(count, sArr);
    if (count < j)
        QuickSort(count, sArr);
}
 
void Print (int count, int* mas) 
{
    for (int i = 0; i < count; i++)
    {
        cout << mas[i] << " ";
    }
    cout << "\n";
}
void main()
{
    setlocale(LC_ALL, "Russian");
    const int count = 100;
    int Arr[count]; 
 
    for( int x = 0; x < count; x++)
        Arr[x] = rand()%200 + 1;
    cout << "До сортировки: ";
    Print(count, Arr);
    QuickSort(count, Arr);
    cout << "\nПосле сортировки: ";
    Print(count, Arr);
    _getch();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Taras_Z
 Аватар для Taras_Z
100 / 84 / 2
Регистрация: 27.10.2010
Сообщений: 534
Записей в блоге: 2
31.03.2012, 12:07     Быстрая сортировка #2
Алгоритмы сортировок
tofers
 Аватар для tofers
27 / 27 / 2
Регистрация: 07.10.2011
Сообщений: 204
31.03.2012, 12:21  [ТС]     Быстрая сортировка #3
Taras_Z, Я это читал уже. Просто выводит постоянно -8500......

Как от этого избавиться. Использовав массив
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
31.03.2012, 12:29     Быстрая сортировка #4
Цитата Сообщение от tofers Посмотреть сообщение
Taras_Z, Я это читал уже. Просто выводит постоянно -8500......

Как от этого избавиться. Использовав массив
C++
1
2
3
4
5
6
7
        if(i <=  j) {
           x = sArr[i];
           sArr[i] = sArr[j];
           sArr[j] = x;
            i++;
            j--;
        }
Используй не х, а новую переменную

Добавлено через 3 минуты
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
    void QuickSort(int count, int* sArr)
    {
        int i = 0, j = count;
        long  x = sArr[count >> 1 ];
        long y;
     
        do {
            while (sArr[i] < x) i++;
            while (sArr[j] > x) j--;
     
            if(i <=  j) {
               y = sArr[i];
               sArr[i] = sArr[j];
               sArr[j] = y;
                i++;
                j--;
            }
        } while (i <= j);
     
        if (j > 0)
            QuickSort(j, sArr);
        if (count > i)
            QuickSort(count-i, sArr+i);
    }
tofers
 Аватар для tofers
27 / 27 / 2
Регистрация: 07.10.2011
Сообщений: 204
31.03.2012, 12:50  [ТС]     Быстрая сортировка #5
Nekto, Не помогло При трасировке в sArr[j] -85...
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
31.03.2012, 13:15     Быстрая сортировка #6
Цитата Сообщение от tofers Посмотреть сообщение
Nekto, Не помогло При трасировке в sArr[j] -85...
У меня с этим кодом -
Код
До сортировки: 42 68 135 101 170 125 79 159 163 65 106 146 82 28 162 92 196 143
28 37 192 5 103 154 93 183 22 117 119 96 48 127 172 139 70 113 68 100 36 95 104
12 123 134 74 65 142 112 54 69 148 45 63 158 38 60 124 142 130 179 117 36 191 43
 89 107 41 143 65 49 47 6 91 130 171 151 7 102 194 149 30 24 85 155 157 41 167 1
77 132 109 145 40 27 124 138 139 119 83 130 142

После сортировки: 5 6 7 12 22 24 27 28 28 30 36 36 37 38 40 41 41 42 43 45 47 48
 49 54 60 63 65 65 65 68 68 69 70 74 79 82 83 85 89 91 92 93 95 96 100 101 102 1
03 104 106 107 109 112 113 117 117 119 119 120 123 124 124 125 127 130 130 130 1
32 134 135 138 139 139 142 142 142 143 143 145 146 148 149 151 154 155 157 158 1
59 162 163 167 170 171 172 177 179 183 191 192 194
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
    #include <iostream>
    #include <conio.h>
    #include <stdlib.h> // ГЋГІГ±ГѕГ¤Г* áåð¸ì rand()
    #include <time.h> // Çäåñü Г*Г*õîäèòñÿ time()
    #include <string>
     
    using namespace std;
     
    void QuickSort(int count, int* sArr)
    {
        int i = 0, j = count;
        long  x = sArr[count >> 1 ];
        long y;
     
        do {
            while (sArr[i] < x) i++;
            while (sArr[j] > x) j--;
     
            if(i <=  j) {
               y = sArr[i];
               sArr[i] = sArr[j];
               sArr[j] = y;
                i++;
                j--;
            }
        } while (i <= j);
     
        if (j > 0)
            QuickSort(j, sArr);
        if (count > i)
            QuickSort(count-i, sArr+i);
    }
     
    void Print (int count, int* mas)
    {
        for (int i = 0; i < count; i++)
        {
            cout << mas[i] << " ";
        }
        cout << "\n";
    }
    int main()
    {
        setlocale(LC_ALL, "Russian");
        const int count = 100;
        int Arr[count];
     
        for( int x = 0; x < count; x++)
            Arr[x] = rand()%200 + 1;
        cout << "Äî ñîðòèðîâêè: ";
        Print(count, Arr);
        QuickSort(count, Arr);
        cout << "\nÏîñëå ñîðòèðîâêè: ";
        Print(count, Arr);
        _getch();
        return 0;
    }
Taras_Z
 Аватар для Taras_Z
100 / 84 / 2
Регистрация: 27.10.2010
Сообщений: 534
Записей в блоге: 2
31.03.2012, 13:23     Быстрая сортировка #7
а у меня нет

C++
1
2
3
4
5
6
 
До сортировки: 42 68 135 101 170 125 79 159 163 65 106 146 82 28 162 92 196 143 28 37 192 5 103 154 93 183 22 117 119 96 48 127 172 139 70 113 68 100 36 95 104 12 123 134 74 65 142 112 54 69 148 45 63 158 38 60 124 142 130 179 117 36 191 43 89 107 41 143 65 49 47 6 91 130 171 151 7 102 194 149 30 24
 85 155 157 41 167 177 132 109 145 40 27 124 138 139 119 83 130 142
 
После сортировки: -858993460 5 6 7 12 22 24 27 28 28 30 36 36 37 38 40 41 41 42 43 45 47 48 49 54 60 63 65 65 65 68 68 69 70 74 79 82 83 85 89 91 92 93 95 96 100 101 102 103 104 106 107 109 112 113 117 117 119 119 123 124 124 125 127 130 130 130 132 134 135 138 139 139 142 142 142 143 143 145 146 14
8 149 151 154 155 157 158 159 162 163 167 170 171 172 177 179 183 191 192 194
tofers
 Аватар для tofers
27 / 27 / 2
Регистрация: 07.10.2011
Сообщений: 204
31.03.2012, 14:14  [ТС]     Быстрая сортировка #8
У меня Студия 2008.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
31.03.2012, 14:43     Быстрая сортировка #9
Цитата Сообщение от tofers Посмотреть сообщение
У меня Студия 2008.
Dev-C++

Добавлено через 13 минут
Нашел ошибку. в main() вместо
C++
1
    QuickSort(count, Arr);
C++
1
    QuickSort(count-1, Arr);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2012, 15:22     Быстрая сортировка
Еще ссылки по теме:

Быстрая сортировка (сортировка Хоара) для связных списков C++
Быстрая сортировка (сортировка методом Хоара) C++
C++ Сортировка Хоара / Быстрая сортировка

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

Или воспользуйтесь поиском по форуму:
tofers
 Аватар для tofers
27 / 27 / 2
Регистрация: 07.10.2011
Сообщений: 204
31.03.2012, 15:22  [ТС]     Быстрая сортировка #10
Nekto, Спс
Yandex
Объявления
31.03.2012, 15:22     Быстрая сортировка
Ответ Создать тему
Опции темы

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