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

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

Войти
Регистрация
Восстановить пароль
 
 
Sylar9
134 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,952
Записей в блоге: 1
#1

Не срабатывает сортировка - C++

08.11.2011, 10:58. Просмотров 572. Ответов 19
Метки нет (Все метки)

не сортируется вектор
вот код:
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
#include <iostream>
#include <vector>
using namespace std;
void sort(vector<int> v);
int main()
{
    vector<int> vect;
    int temp;
    while(cin>>temp)
        vect.push_back(temp);
    cout << "-------------------" << endl;
    sort(vect);
 
 
 system("pause");
    return 0;
}
 
void sort(vector<int> v)
{
    int temp;
    for(int i=0; i<v.size(); i++)
        for(int j=0; j<v.size()-1; j++)
        {
           if(v[j]<v[j++])
           {
               v[j]=temp;
               temp=v[j++];
               v[j++]=temp;        
           }
        
        }
        for(int k=0; k<v.size(); k++)
            cout<<v[k]<<endl;
 
}
Не срабатывает сортировка
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.11.2011, 10:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не срабатывает сортировка (C++):

Сортировка Шелла. Написал программу, не могу понять, почему сортировка не выполняется - C++
Программа создает динамический массив с рандомным заполнением. Дальше выбор сортировок, пузырьком или сортировка Шелла. Вот она то и не...

Сортировка слиянием. В каком куске кода происходит сортировка и каким именно образом? - C++
Помогите, пожалуйста, разобраться. Подскажите в каком куске кода происходит сортировка и каким именно образом? #include &lt;iostream&gt; ...

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

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

Сортировка Шелла и пирамидальная сортировка для символов - C++
Здраствуйте, можете пожалуйста привести пример сортировок шелла и пиромидальной сортировки для символов, а то ничего не могу ...

Не срабатывает if - C++
Почему-то не срабатывает if при условии, что мы ввели единицу. Подскажите, пожалуйста, в чем причина. #include &lt;iostream&gt; using...

19
Thinker
Эксперт С++
4230 / 2204 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
08.11.2011, 11:14 #2
Как минимум, уберите везде j++ и оставьте инкремент только в цикле. Напишите v[j+1]
0
Sylar9
134 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,952
Записей в блоге: 1
08.11.2011, 11:35  [ТС] #3
Цитата Сообщение от Thinker Посмотреть сообщение
Как минимум, уберите везде j++ и оставьте инкремент только в цикле. Напишите v[j+1]
Все рано не работает
0
Thinker
Эксперт С++
4230 / 2204 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
08.11.2011, 11:43 #4
Цитата Сообщение от Sylar9 Посмотреть сообщение
Все рано не работает
Так элементы надо правильно менять:
temp = v[j];
v[j] = v[j+1];
v[j+1] = temp;
0
Sylar9
134 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,952
Записей в блоге: 1
08.11.2011, 11:50  [ТС] #5
Цитата Сообщение от Thinker Посмотреть сообщение
Так элементы надо правильно менять:
temp = v[j];
v[j] = v[j+1];
v[j+1] = temp;
поменял не работает
0
Thinker
Эксперт С++
4230 / 2204 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
08.11.2011, 11:53 #6
Цитата Сообщение от Sylar9 Посмотреть сообщение
поменял не работает
Покажите программу
0
Sylar9
134 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,952
Записей в блоге: 1
08.11.2011, 11:56  [ТС] #7
Цитата Сообщение от Thinker Посмотреть сообщение
Покажите программу
вот
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
#include <iostream>
#include <vector>
using namespace std;
void sort(vector<int> v);
int main()
{
    vector<int> vect;
    int temp;
    while(cin>>temp)
        vect.push_back(temp);
sort(vect);
 
 
 system("pause");
    return 0;
}
 
void sort(vector<int> v)
{
    int temp;
    for(int i=0; i<v.size(); i++)
        for(int j=0; j<v.size()-1; j++)
        {
           if(v[j]<v[j++])
           {
               temp = v[j];
                v[j] = v[j+1];
                v[j+1] = temp;     
           }
        
        }
        for(int k=0; k<v.size(); k++)
            cout<<v[k]<<endl;
 
}
0
Thinker
Эксперт С++
4230 / 2204 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
08.11.2011, 11:59 #8
Цитата Сообщение от Thinker Посмотреть сообщение
Как минимум, уберите везде j++ и оставьте инкремент только в цикле. Напишите v[j+1]
Везде надо было это сделать
0
Sylar9
134 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,952
Записей в блоге: 1
08.11.2011, 12:03  [ТС] #9
Цитата Сообщение от Thinker Посмотреть сообщение
Везде надо было это сделать
Все работает, а как можно вектор разбросать то есть на пример 1, 2, 3 должно вывести 3, 1, 2 то есть в любом порядки разбросать. Мне надо написать функцию
0
Петррр
6123 / 3423 / 338
Регистрация: 28.10.2010
Сообщений: 5,926
08.11.2011, 12:04 #10
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
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
 
using namespace std;
 
void sort(vector<int> vec);
 
int main()
{
    vector<int> vec;
    int tmp;
    while (cin >> tmp)
        vec.push_back(tmp);
    sort(vec);
    return 0;
}
 
void sort(vector<int> vec)
{
    int len = vec.size();
    for(int i = 0; i < len - 1; i++)
        for(int j = i + 1; j < len; j++)
            if (vec[i] > vec[j])
            {
                int buf = vec[i];
                vec[i] = vec[j];
                vec[j] = buf;
            }
 
    copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, " "));
}
0
ForEveR
В астрале
Эксперт С++
7988 / 4747 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
08.11.2011, 12:05 #11
Sylar9, std::random_shufle.
0
Thinker
Эксперт С++
4230 / 2204 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
08.11.2011, 12:06 #12
Цитата Сообщение от Sylar9 Посмотреть сообщение
Все работает, а как можно вектор разбросать то есть на пример 1, 2, 3 должно вывести 3, 1, 2 то есть в любом порядки разбросать. Мне надо написать функцию
C++
1
2
3
4
5
for(i = 0; i < n - 1; i++)
{
   k = rand()%(n-i) + i;
   // меняем местами v[i] и v[k] и все
}
0
Петррр
6123 / 3423 / 338
Регистрация: 28.10.2010
Сообщений: 5,926
08.11.2011, 12:07 #13
Цитата Сообщение от Sylar9 Посмотреть сообщение
Все работает, а как можно вектор разбросать то есть на пример 1, 2, 3 должно вывести 3, 1, 2 то есть в любом порядки разбросать. Мне надо написать функцию
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
 
using namespace std;
 
int main()
{
    vector<int> vec;
    for(int i = 0; i < 10; i++)
        vec.push_back(i);
    random_shuffle(vec.begin(), vec.end());
    copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, " "));
 
    return 0;
}
Так она уже есть.
0
Sylar9
134 / 55 / 2
Регистрация: 04.09.2011
Сообщений: 1,952
Записей в блоге: 1
08.11.2011, 12:12  [ТС] #14
Цитата Сообщение от Петррр Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
 
using namespace std;
 
int main()
{
    vector<int> vec;
    for(int i = 0; i < 10; i++)
        vec.push_back(i);
    random_shuffle(vec.begin(), vec.end());
    copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, " "));
 
    return 0;
}
Так она уже есть.
мне самому надо написать эту функцию
0
Петррр
6123 / 3423 / 338
Регистрация: 28.10.2010
Сообщений: 5,926
08.11.2011, 12:16 #15
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
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
#include <ctime>
 
using namespace std;
 
void random_shuffle(vector<int> &vec)
{
    int len = vec.size();
    for(int i = 0; i < len; i++)
    {
        int index = rand() % len;
        int buf = vec[i];
        vec[i] = vec[index];
        vec[index] = buf;
    }
}
 
int main()
{
    vector<int> vec;
    for(int i = 0; i < 10; i++)
        vec.push_back(i);
    srand(time(NULL));
    random_shuffle(vec);
    copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, " "));
 
    return 0;
}
0
08.11.2011, 12:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2011, 12:16
Привет! Вот еще темы с ответами:

Не срабатывает gets - C++
Ребят, не пойму почему, но строка с gets в ниже приведенном коде игнорируется - ввести мне ничего не дает: int ch; char str; ...

Не срабатывает - C++
Не хочет работать код, что тут не так? #include &lt;iostream&gt; using namespace std; class A{ public: int radok(int a, int b,...

Не срабатывает цикл FOR - C++
Начал писать программу. Компилятор игнорирует оператор FOR, при этом не каких ошибок не выдаёт. #include &quot;stdafx.h&quot; #include...

Не срабатывает вложенные If/else - C++
Написал программу, в программе в цикле while есть большой список if/else который по величине SS суммирует определенные ячейки массива...


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

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

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