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

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

Войти
Регистрация
Восстановить пароль
 
arzhanok
1 / 1 / 1
Регистрация: 10.07.2014
Сообщений: 38
#1

Написать функцию, которая сортирует переданный ей динамический массив "быстрой" сортировкой - C++

18.08.2014, 20:40. Просмотров 525. Ответов 11
Метки нет (Все метки)

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
#include <iostream>
#include <vector>
using namespace std;
void qSort( vector <int> &A,int nStart, int nEnd)
{    
    int L,R,c,X;
     if (nStart>=nEnd) return; 
     L=nStart; R=nEnd;
     X=A[(L+R)/2];
     while (L<=R)            
         {
           while (A[L]<X) L++; 
           while (A[R]>X) R--; 
           if (L<=R) 
           {
             c=A[L]; A[L]=A[R];  A[R]=c; 
             L++; R--;
           }   
         }
      qSort (A,nStart,R); 
      qSort (A,L,nEnd);  
     
}
int main(void)
{ 
     setlocale (0,"");
     
     vector <int> A;
     cout << "ââåäè  Г¬Г*Г±Г±ГЁГў (vector), ââîä Г§Г*ГЄГ®Г*Г·ГЁГІГ±Гї Г*óëåì : " << endl;
     int N; int count = 0;
     while ( N )
        {
           cout << "N = ";
           cin >> N; 
           if (N) A.push_back( N );  
        }
     qSort( A , 0, A.size() );
     cout << "îòñîðòèðîâГ*Г*Г*ûé Г¬Г*Г±Г±ГЁГў : " << endl;
     for ( int i = 0; i <  A.size(); i++) cout << A[i] << " ";
     
     
   
     system ("PAUSE");
}
Подскажите, пожалуйста, ошибку.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.08.2014, 20:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Написать функцию, которая сортирует переданный ей динамический массив "быстрой" сортировкой (C++):

Написать программу, которая методом обмена "пузырька" сортирует по убыванию введенный с клавиатуры одномерный массив - C++
...написать программу, которая методом обмена &quot;пузырька&quot; сортирует по убыванию введенный с клавиатуры одномерный массив

Написать функцию, которая зануляет массив переданный как параметр и возвращает кол-во отрицательных элементов до зануления? - C++
Написать функцию, которая зануляет массив переданный как параметр и возвращает кол-во отрицательных элементов до зануления? Такие дела.:(

Написать функцию, которая сортирует вещественный массив методом Хоара - C++
Написать функцию ,которая сортирует вещественный массив методом Хоара по убыванию суммы разности тангенса и котангенса элементов на...

Проблемы с "Быстрой сортировкой" - C++
Ребята, всем привет, не могли бы вы мне помочь. Столкнулся с быстрой сортировкой, но что-то не выходит ее реализовать. Вот код: #include...

Написать функцию, которая сортирует массив по возрастанию или по убыванию, в зависимости от третьего параметра функции. - C++
Доброго времени суток! У меня возникла некоторая проблема в написании кода для задания: Дан массив чисел размерностью 10 элементов....

Написать функцию поиска человека по полю "фамилия" в массиве структур "Note" ("Персональная информация") - C++
Вывести из структуры информацию о человеке, чья фамилия введена с клавиатуры #include &lt;iostream&gt; #include &lt;locale&gt; #include...

11
Vaiz
104 / 98 / 30
Регистрация: 01.07.2012
Сообщений: 277
Завершенные тесты: 1
18.08.2014, 21:02 #2
Как бы вот она рабочая Алгоритмы сортировок
с ней и сравнивайте.
1
Donnerwetter
40 / 40 / 12
Регистрация: 04.02.2014
Сообщений: 144
19.08.2014, 00:16 #3
Вот в этом месте нужно использовать цикл с постусловием:
C++
1
2
3
4
5
6
7
int N; int count = 0;
while ( N )
{
   cout << "N = ";
   cin >> N; 
   if (N) A.push_back( N );  
}
На момент вхождения в цикл значение N не определено, соответственно проверка while(N) не имеет смысла. Ну и наличие переменной count никак не проявляется.
1
arzhanok
1 / 1 / 1
Регистрация: 10.07.2014
Сообщений: 38
19.08.2014, 10:08  [ТС] #4
C++
1
2
3
4
5
6
do
        {
           cout << "N = ";
           cin >> N; 
           if (N) A.push_back( N );  
        } while ( N );
это переделал. Ошибку понял. но все равно где-то ошибка. ввожу 3,2,1,0 выводит 0,1,2 ... тройка куда делась???
0
Donnerwetter
40 / 40 / 12
Регистрация: 04.02.2014
Сообщений: 144
19.08.2014, 11:00 #5
Цитата Сообщение от arzhanok Посмотреть сообщение
выводит 0,1,2 ... тройка куда делась???
очевидно, остается за границей выводимого массива; попробуйте сделать i<= A.size()
0
arzhanok
1 / 1 / 1
Регистрация: 10.07.2014
Сообщений: 38
19.08.2014, 11:37  [ТС] #6
нет, тогда если так сделать, и ввести , например, 5,4,3,2,1,0 , то выводится 1,2,3,4,5 и какой - то мусор еще вылазит...
0
Vaiz
104 / 98 / 30
Регистрация: 01.07.2012
Сообщений: 277
Завершенные тесты: 1
19.08.2014, 11:54 #7
arzhanok, скопируйте полностью код, что у вас получился.
Цитата Сообщение от Donnerwetter Посмотреть сообщение
i<= A.size()
Это точно не правильно.
0
arzhanok
1 / 1 / 1
Регистрация: 10.07.2014
Сообщений: 38
19.08.2014, 12:18  [ТС] #8
Vaiz, сама сортировка работает нормально. мне именно к вектору ее приделать не получается...
0
Vaiz
104 / 98 / 30
Регистрация: 01.07.2012
Сообщений: 277
Завершенные тесты: 1
19.08.2014, 12:43 #9
Цитата Сообщение от arzhanok Посмотреть сообщение
Vaiz, сама сортировка работает нормально. мне именно к вектору ее приделать не получается...
Весь код покажите, вы ведь уже вносили изменения.
0
Kerry_Jr
Модератор
Эксперт PHP
2206 / 2002 / 701
Регистрация: 14.05.2014
Сообщений: 5,867
Записей в блоге: 1
Завершенные тесты: 5
19.08.2014, 13:04 #10
Цитата Сообщение от arzhanok Посмотреть сообщение
C++
1
2
3
4
5
6
do
{
    cout << "N = ";
    cin >> N; 
    if (N) A.push_back( N ); *
} while ( N );
это переделал. Ошибку понял. но все равно где-то ошибка. ввожу 3,2,1,0 выводит 0,1,2 ... тройка куда делась???
А меня еще интересует вопрос: ноль откуда взялся?
0
arzhanok
1 / 1 / 1
Регистрация: 10.07.2014
Сообщений: 38
19.08.2014, 16:10  [ТС] #11
сам не пойму...
if (N) A.push_back( N ); // если не ноль, тогда A.push_back( N ), получается и ноля не должно быть ... )))

Добавлено через 1 минуту
сам не пойму...
if (N) A.push_back( N ); // если не ноль, тогда A.push_back( N ), получается и ноля не должно быть ... )))

Добавлено через 1 минуту
Vaiz,
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
#include <iostream>
#include <vector>
using namespace std;
void qSort( vector <int> &A,int nStart, int nEnd)
{    
    int L,R,c,X;
     if (nStart>=nEnd) return; 
     L=nStart; R=nEnd;
     X=A[(L+R)/2];
     while (L<=R)            
         {
           while (A[L]<X) L++; 
           while (A[R]>X) R--; 
           if (L<=R) 
           {
             c=A[L]; A[L]=A[R];  A[R]=c; 
             L++; R--;
           }   
         }
      qSort (A,nStart,R); 
      qSort (A,L,nEnd);  
     
}
int main(void)
{ 
     setlocale (0,"");
     
     vector <int> A;
     cout << "введи  массив (vector), ввод закончится нулем : " << endl;
     int N; 
     do
        {
           cout << "N = ";
           cin >> N; 
           if (N) A.push_back( N );  
        } while ( N );
     qSort( A , 0, A.size() );
     cout << "отсортированный массив : " << endl;
     for ( int i = 0; i <  A.size(); i++) cout << A[i] << " ";
     
     
   
     system ("PAUSE");
}
0
Vaiz
104 / 98 / 30
Регистрация: 01.07.2012
Сообщений: 277
Завершенные тесты: 1
19.08.2014, 16:18 #12
Цитата Сообщение от arzhanok Посмотреть сообщение
нет, тогда если так сделать, и ввести , например, 5,4,3,2,1,0 , то выводится 1,2,3,4,5 и какой - то мусор еще вылазит...
Ну вроде у вас все правильно получается, 0 является признаком конца ввода и в массив не вносится, думаю вы это уже сами поняли.
0
19.08.2014, 16:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.08.2014, 16:18
Привет! Вот еще темы с ответами:

Написать программу, которая запрашивает у пользователя номер дня недели и выводит одно из сообщений: "Рабочий день","Суббота" или "Воскресенье" - C++
Написать программу, которая запрашивает у пользователя номер дня недели и выводит одно из сообщений: &quot;Рабочий день&quot;,&quot;Суббота&quot; или...

Написать и протестировать функцию, которая "переворачивает" строку, передаваемую ей в качестве параметра - C++
Написать и протестировать функцию,которая &quot;переворачивает&quot; строку,передаваемую ей в качестве параметра

Написать функцию, которая в массиве char ищет цифры и заменяет их символом "#" - C++
Простите за наглость... Но в С++ вообще плыву. Просьба - помогите пожалуйста в написании программки, если вас не слишком затруднит...!!! ...

Функция: Написать и протестировать функцию, которая "сжимает" строку, удаляя из неё все пробелы. - C++
Тема &quot;Нестандартные функции&quot; Написать и протестировать функцию, которая &quot;сжимает&quot; строку, удаляя из неё все пробелы. Символьная строка...


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

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

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