Форум программистов, компьютерный форум, киберфорум С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
139 / 60 / 13
Регистрация: 04.09.2011
Сообщений: 1,956
Записей в блоге: 1
1

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

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

Author24 — интернет-сервис помощи студентам
не сортируется вектор
вот код:
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.11.2011, 10:58
Ответы с готовыми решениями:

Почему не срабатывает сортировка?
Пример тут: http://plnkr.co/edit/v304LQd1u8L4uIknNBIG?p=preview Разбираюсь с фильтрами в...

Запрос срабатывает в SQL Server, но не корректно срабатывает в Visual Studio 2017
(SELECT ROW_NUMBER() over (ORDER BY AVG(Отметки.Отметка) DESC) ID, .ФИО, .Группа, Отметки.,...

Таймер срабатывает раньше времени или вообще не срабатывает
Помогите, пожалуйста, разобраться, что нетак с таймером. Браузер Chrome При создании записи,...

Сортировка выбором, сортировка вставкой, сортировка заменой, сортировка обменом ("пузырьковая" сортировка)
Создать класс, содержащий массив и реализующий алгоритмы сортировки и бинарного поиска в этом...

19
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
08.11.2011, 11:14 2
Как минимум, уберите везде j++ и оставьте инкремент только в цикле. Напишите v[j+1]
0
139 / 60 / 13
Регистрация: 04.09.2011
Сообщений: 1,956
Записей в блоге: 1
08.11.2011, 11:35  [ТС] 3
Цитата Сообщение от Thinker Посмотреть сообщение
Как минимум, уберите везде j++ и оставьте инкремент только в цикле. Напишите v[j+1]
Все рано не работает
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 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
139 / 60 / 13
Регистрация: 04.09.2011
Сообщений: 1,956
Записей в блоге: 1
08.11.2011, 11:50  [ТС] 5
Цитата Сообщение от Thinker Посмотреть сообщение
Так элементы надо правильно менять:
temp = v[j];
v[j] = v[j+1];
v[j+1] = temp;
поменял не работает
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
08.11.2011, 11:53 6
Цитата Сообщение от Sylar9 Посмотреть сообщение
поменял не работает
Покажите программу
0
139 / 60 / 13
Регистрация: 04.09.2011
Сообщений: 1,956
Записей в блоге: 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
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
08.11.2011, 11:59 8
Цитата Сообщение от Thinker Посмотреть сообщение
Как минимум, уберите везде j++ и оставьте инкремент только в цикле. Напишите v[j+1]
Везде надо было это сделать
0
139 / 60 / 13
Регистрация: 04.09.2011
Сообщений: 1,956
Записей в блоге: 1
08.11.2011, 12:03  [ТС] 9
Цитата Сообщение от Thinker Посмотреть сообщение
Везде надо было это сделать
Все работает, а как можно вектор разбросать то есть на пример 1, 2, 3 должно вывести 3, 1, 2 то есть в любом порядки разбросать. Мне надо написать функцию
0
6287 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
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
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
08.11.2011, 12:05 11
Sylar9, std::random_shufle.
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 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
6287 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
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
139 / 60 / 13
Регистрация: 04.09.2011
Сообщений: 1,956
Записей в блоге: 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
6287 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
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
139 / 60 / 13
Регистрация: 04.09.2011
Сообщений: 1,956
Записей в блоге: 1
08.11.2011, 12:17  [ТС] 16
Цитата Сообщение от Thinker Посмотреть сообщение
C++Выделить код
1
2
3
4
5
for(i = 0; i < n - 1; i++)
{
   k = rand()%(n-i) + i;
   // меняем местами v[i] и v[k] и все
}
Пробувал ошибку выдает:
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
#include <iostream>
#include <vector>
#include <cstdlib>
using namespace std;
void sort(vector<int> v);
void per(vector<int> v, int k);
int main()
{
    vector<int> vect;
    int temp;
    while(cin>>temp)
        vect.push_back(temp);
sort(vect);
per(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+1])
           {
               temp = v[j];
                v[j] = v[j+1];
                v[j+1] = temp;     
           }
        
        }
        for(int k=0; k<v.size(); k++)
            cout<<v[k]<<endl;
 
}
void per(vector<int> v, int k)
{
for(int i = 0; i < v.size() - 1; i++)
{
   k = rand()%(v.size()-i) + i;
   // меняем местами v[i] и v[k] и все
   cout<<v[i]<<endl;
}
}
Вот ошибка: 'per' : function does not take 1 parameters
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
08.11.2011, 12:21 17
Sylar9, А зачем передавать k?
0
139 / 60 / 13
Регистрация: 04.09.2011
Сообщений: 1,956
Записей в блоге: 1
08.11.2011, 12:23  [ТС] 18
Цитата Сообщение от ForEveR Посмотреть сообщение
Sylar9, А зачем передавать k?
Не знаю??? убрал К всерано ошибка
void per(vector<int> v)
{
for(int i = 0; i < v.size() - 1; i++)
{
  int k = rand()%(v.size()-i) + i;
   // меняем местами v[i] и v[k] и все
   cout<<v[i]<<endl;
}
}
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
08.11.2011, 12:28 19
Sylar9, Почитайте как следует книжку. Одно дело с чем-то помочь. Другое дело - объяснять все с нуля.
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
08.11.2011, 12:47 20
[QUOTE=Sylar9;2147958]Пробувал ошибку выдает:
C++Выделить код
1
2
3
4
5
6
7
8
9
void per(vector<int> v, int k)
{
for(int i = 0; i < v.size() - 1; i++)
{
   k = rand()%(v.size()-i) + i;
   // меняем местами v[i] и v[k] и все
   cout<<v[i]<<endl;
}
}

Не по теме:

Ну вы прикалист:D, особенно комментарий понравился. Я его написал, чтобы вы его прописали. ForEveR хороший дал вам совет - книжки почитайте

0
08.11.2011, 12:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.11.2011, 12:47
Помогаю со студенческими работами здесь

Блок схема.Сортировка «Пузырьком», Сортировка методом «Последовательных перестановок», Сортировка «Вставками»
Помогите, нужны блок схемы Сортировка «Вставками» Program Vstavka; uses dos; Type mass=array ...

Разработать программу сортировки: сортировка перестановкой, сортировка вставкой, быстрая сортировка
Задание: Разработать программу сортировки: - сортировка перестановкой - сортировка...

1)Бинарный поиск 2)Сортировка включением 3)Шейкерная сортировка 4)Сортировка разделением
1)В заданном массиве К(N) найти индексы элементов, которые кратны минимальному значению элемента...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru