Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
tofers
28 / 28 / 2
Регистрация: 07.10.2011
Сообщений: 204
#1

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

31.03.2012, 11:56. Просмотров 697. Ответов 9
Метки нет (Все метки)

Объясните в чем подвох? Выводит какое большое отрицательное числа %)
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();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2012, 11:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Быстрая сортировка (C++):

Быстрая сортировка (сортировка Хоара) для связных списков - C++
есть у кого готовый алгоритм? или подскажите как реализовать

Быстрая сортировка(сортировка Хоара). Отсортировать фрагмент массива - C++
Мне нужно отсортировать фрагмент массива, расположенный между первым и последним отрицательным элементом. Немогу понять как устоновить...

Быстрая сортировка (сортировка методом Хоара) - C++
Ввести массив x1,x2,...,x20 в диапазоне . Требуется расположить отрицательные элементы в порядке убывания. Вывести массивы до и после...

C/C++ FAQ :: Быстрая сортировка (сортировка Хоара) - C++
Вопрос, скорее академический, по мотивам реализации. Вот в faq приведена реализация этого метода сортировки на C++. В коде есть следующий...

Сортировка Хоара / Быстрая сортировка - C++
Доброго времени суток. Написал реализацию алгоритма быстрой сортировки. void SortHhoar(int *arr,int f,int l)//Хоара { int mid = (f...

Сортировка расчёской и быстрая сортировка - C++
В файле in.txt записана последовательность целых чисел. Заданными методами отсортировать числа и записать в файлы out1.txt и out2.txt....

9
Taras_Z
100 / 84 / 2
Регистрация: 27.10.2010
Сообщений: 534
Записей в блоге: 2
31.03.2012, 12:07 #2
Алгоритмы сортировок
0
tofers
28 / 28 / 2
Регистрация: 07.10.2011
Сообщений: 204
31.03.2012, 12:21  [ТС] #3
Taras_Z, Я это читал уже. Просто выводит постоянно -8500......

Как от этого избавиться. Использовав массив
0
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);
    }
0
tofers
28 / 28 / 2
Регистрация: 07.10.2011
Сообщений: 204
31.03.2012, 12:50  [ТС] #5
Nekto, Не помогло При трасировке в sArr[j] -85...
0
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;
    }
0
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
0
tofers
28 / 28 / 2
Регистрация: 07.10.2011
Сообщений: 204
31.03.2012, 14:14  [ТС] #8
У меня Студия 2008.
0
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);
1
tofers
28 / 28 / 2
Регистрация: 07.10.2011
Сообщений: 204
31.03.2012, 15:22  [ТС] #10
Nekto, Спс
0
31.03.2012, 15:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2012, 15:22
Привет! Вот еще темы с ответами:

Быстрая сортировка - C++
Суть задания состоит в сортировке структуры по второму параметру. Сделал пузырьковым методом: #include &lt;iostream&gt; #include &lt;conio.h&gt;...

Быстрая сортировка - C++
Смотрел в тему посвященной быстрой сортировке, и не совсем понял. написал подобный код. Хотелось бы наиболее подробных комментариев, за...

Быстрая сортировка - C++
Задача: пользователь задает количество элементов массива (макс. - 500 000), вводит их, затем задает количество запросов (макс. - 10000) и...

Быстрая сортировка - C++
void qSort(int a, int N) { int i = 0, j = N; int temp, p; p = a; do { while ( a &lt; p ) i++;


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

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

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