Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
MMt
0 / 0 / 6
Регистрация: 29.04.2014
Сообщений: 176
#1

Почему не сортируется массив? - C++

18.06.2014, 19:05. Просмотров 432. Ответов 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 <cstdlib>
#include <iostream>
 
using namespace std;
 
 
 
int main(){
    int s = 9;
    setlocale(0,"");
    int Arr2[s];
    int val = 0;
    
    
    for(int k=0; k<s; ++k)
        Arr2[k]=rand()%10;
    
    for(int k=0; k<s; ++k)
        cout    <<Arr2[k]<< ", \n";
    
    cout    <<"Ñîðòèðóþ \n";
    
    for(int i = 0; i<s;++i){        
        if(Arr2[i]>Arr2[i+1]){
            int val=0;
            val=Arr2[i+1];
            Arr2[i+1]=Arr2[i];
            Arr2[i]=val;    
        }
    }
    
    for(int i=0; i<s; ++i)
        cout    << Arr2[i]<< ", ";
    
    return 0;
}

http://www.cyberforum.ru/cpp-beginners/thread1290486.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2014, 19:05
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Почему не сортируется массив? (C++):

Почему не сортируется массив?
using namespace std; void scan(int * mass) { for( int i = 0; i &lt; 10; i++)...

Почему не сортируется массив?
Доброго времени суток уважаемые Форумчане,нужно отсортировать в порядке...

Почему не сортируется вектор структур?
Выводится ошибка...

Почему данная реализация связного списка не сортируется по убыванию?
Сформировать список из вещественных чисел. Упорядочить список по убыванию....

Массив не сортируется
Здравствуйте. Программа не сортирует массив, не могу разобраться в чем...

19
Тамика
Котовчанин
918 / 462 / 195
Регистрация: 16.02.2010
Сообщений: 3,264
Записей в блоге: 28
18.06.2014, 19:09 #2
Цитата Сообщение от MMt Посмотреть сообщение
for(int i = 0; i<s;++i){* * * *
* * * * if(Arr2[i]>Arr2[i+1]){
* * * * * * int val=0;
* * * * * * val=Arr2[i+1];
* * * * * * Arr2[i+1]=Arr2[i];
* * * * * * Arr2[i]=val;* *
* * * * }
* * }
Потому что одного раза маловато будет.

Добавлено через 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
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
 
 
int main(){
    int s = 9;
    setlocale(0,"");
    int *Arr2 = new int[s];
    int val = 0;
    
    
    for(int k=0; k<s; ++k)
        Arr2[k]=rand()%10;
    
    for(int k=0; k<s; ++k)
        cout    <<Arr2[k]<< ", \n";
    
    cout    <<"Сортирую \n";
    
    for (int i = 2; i < s; ++i)
    {
        int key = Arr2[i];
        int j = i - 1;
        while ((j > 0)&&(Arr2[j] > key))
        {
            Arr2[j + 1] = Arr2[j];
            j -= 1;
            Arr2[j + 1] = key;
        }
    }
    if (Arr2[0] > Arr2[1]) 
    {
        int temp = Arr2[1];
        Arr2[1] = Arr2[0];
        Arr2[0] = temp;
    }
    
    for(int i=0; i<s; ++i)
        cout    << Arr2[i]<< ", ";
    
    delete []Arr2;
    system("pause>>null");
}
0
Nicolas
0 / 0 / 0
Регистрация: 16.06.2014
Сообщений: 19
18.06.2014, 19:13 #3
Сортировки в один цыкл не существует. Как минимум в два цикла.

http://kvodo.ru/puzyirkovaya-sortirovka.html
0
Тамика
Котовчанин
918 / 462 / 195
Регистрация: 16.02.2010
Сообщений: 3,264
Записей в блоге: 28
18.06.2014, 19:13 #4
Цитата Сообщение от Nicolas Посмотреть сообщение
Сортировки в один цыкл не существует. Как минимум в два цикла.
Я вот вложилась.
0
MMt
0 / 0 / 6
Регистрация: 29.04.2014
Сообщений: 176
18.06.2014, 19:21  [ТС] #5
что то вы меня совсем запутали как это не существует? простой массив в 1 строку... если А больше Б то прост поменять их местами. в чем проблема? почему так нельзя сделать?
0
Тамика
Котовчанин
918 / 462 / 195
Регистрация: 16.02.2010
Сообщений: 3,264
Записей в блоге: 28
18.06.2014, 19:23 #6
Лучший ответ Сообщение было отмечено MMt как решение

Решение

Цитата Сообщение от MMt Посмотреть сообщение
что то вы меня совсем запутали как это не существует? простой массив в 1 строку... если А больше Б то прост поменять их местами. в чем проблема? почему так нельзя сделать?
о_О Вы меня удивляете.
Есть у Вас - 6 5 8 1.
По Вашему алгоритму -
6 больше 5, меняем местами.
Получаем 5 6 8 1.
Шесть меньше восьми, пропускаем.
Восемь больше единицы - меняем.
Получаем 5 6 1 8.
Всё. Конец.
Почему же не отсортирован массив?
1
LifeMoroz
11 / 11 / 5
Регистрация: 12.10.2013
Сообщений: 54
18.06.2014, 19:24 #7
Цитата Сообщение от Nicolas Посмотреть сообщение
Сортировки в один цыкл не существует. Как минимум в два цикла.
Почему простите?
Простейший пример
http://www.cyberforum.ru/pascalabc/thread407742.html

Пузырьком не получится в один цикл это другой вопрос.

Цитата Сообщение от Тамика Посмотреть сообщение
Я вот вложилась.
У вас два цикла, или глаза меня подводят?
0
Тамика
Котовчанин
918 / 462 / 195
Регистрация: 16.02.2010
Сообщений: 3,264
Записей в блоге: 28
18.06.2014, 19:25 #8
Цитата Сообщение от LifeMoroz Посмотреть сообщение
У вас два цикла, или глаза меня подводят?
Внутренний вайл, разве что, может Вас смущать. Но его можно заменить ифом. И всё.
А могу и ровно в один цикл.
0
cooller
565 / 533 / 280
Регистрация: 25.12.2013
Сообщений: 1,456
18.06.2014, 19:26 #9
MMt, потому что массив будет осортирован только частично
вот тебе пример
исходный массив: 2 1 0 3
1й шаг - меняем 2 и 1. итог: 1 2 0 3
переходим ко второму элементу (2):
2й шаг - меняем 2 и 0. итог 1 0 2 3
дальше будет просматриваться 3й элемент, и к первому возврата уже не будет, как видим, 1 не меньше нуля

в вообще вот, учи
0
MMt
0 / 0 / 6
Регистрация: 29.04.2014
Сообщений: 176
18.06.2014, 19:28  [ТС] #10
доперло спасибо)
0
LifeMoroz
11 / 11 / 5
Регистрация: 12.10.2013
Сообщений: 54
18.06.2014, 19:28 #11
Цитата Сообщение от Тамика Посмотреть сообщение
Внутренний вайл, разве что, может Вас смущать. Но его можно заменить ифом. И всё.
А могу и ровно в один цикл.
Если честно, весьма интересно, как вы реализуете пузырек в 1 цикл.
0
Тамика
Котовчанин
918 / 462 / 195
Регистрация: 16.02.2010
Сообщений: 3,264
Записей в блоге: 28
18.06.2014, 19:28 #12
Цитата Сообщение от LifeMoroz Посмотреть сообщение
Если честно, весьма интересно, как вы реализуете пузырек в 1 цикл.
При чём здесь пузырёк? Я говорю об алгоритмах сортировки. И в своём коде у меня не пузырёк.
0
MMt
0 / 0 / 6
Регистрация: 29.04.2014
Сообщений: 176
18.06.2014, 19:32  [ТС] #13
сделал немного проще.
C++
1
2
3
4
5
6
7
8
9
10
11
    cout    <<"Ñîðòèðóþ \n";
    for(int k=0; k<s;k++){
    for(int i = 0; i<s; ++i){       
        if(Arr2[i]>Arr2[i+1]){
            int val=0;
            val=Arr2[i+1];
            Arr2[i+1]=Arr2[i];
            Arr2[i]=val;    
            }
        }
    }
0
LifeMoroz
11 / 11 / 5
Регистрация: 12.10.2013
Сообщений: 54
18.06.2014, 19:33 #14
Цитата Сообщение от Тамика Посмотреть сообщение
При чём здесь пузырёк?
Потому что в аффтор написал (пусть не работающий) пузырек, может быть я ошибаюсь, но это привело меня к выводу что мы говорим об этом алгоритме.
Прошу прощения, что Вас не понял.
0
Тамика
Котовчанин
918 / 462 / 195
Регистрация: 16.02.2010
Сообщений: 3,264
Записей в блоге: 28
18.06.2014, 19:33 #15
Цитата Сообщение от MMt Посмотреть сообщение
for(int k=0; k<s;k++){
А это зачем?..
0
Тамика
Котовчанин
918 / 462 / 195
Регистрация: 16.02.2010
Сообщений: 3,264
Записей в блоге: 28
18.06.2014, 19:34 #16
Цитата Сообщение от LifeMoroz Посмотреть сообщение
Потому что в аффтор написал (пусть не работающий) пузырек, может быть я ошибаюсь, но это привело меня к выводу что мы говорим об этом алгоритме.
Прошу прощения, что Вас не понял.
Бывает.
0
MMt
0 / 0 / 6
Регистрация: 29.04.2014
Сообщений: 176
18.06.2014, 19:37  [ТС] #17
сделал немного проще.
C++
1
2
3
4
5
6
7
8
9
10
for(int k=0; k<s;k++){
    for(int i = 0; i<s; ++i){       
        if(Arr2[i]>Arr2[i+1]){
            int val=0;
            val=Arr2[i+1];
            Arr2[i+1]=Arr2[i];
            Arr2[i]=val;    
            }
        }
    }
тупо вышло. не первый раз такое задание делаю.... и не справился 2 часа убил...

Добавлено через 1 минуту
как зачем? я цикл прогоняю такое количество раз, сколько у меня элементов в цикле. чтоб каждый элемент поставить на свое место
0
LifeMoroz
11 / 11 / 5
Регистрация: 12.10.2013
Сообщений: 54
18.06.2014, 19:40 #18
Цитата Сообщение от MMt Посмотреть сообщение
C
1
2
3
4
int val=0; 
val=Arr2[i+1]; 
Arr2[i+1]=Arr2[i]; 
Arr2[i]=val;
Arr2[i+1] =Arr2[i+1] ^ Arr2[i]
Arr2[i] = Arr2[i+1] ^ Arr2[i]
Arr2[i+1] = Arr2[i+1] ^ Arr2[i]

если не ошибаюсь, так можно написать

как зачем? я цикл прогоняю такое количество раз, сколько у меня элементов в цикле. чтоб каждый элемент поставить на свое место
А если он будет еще на первом проходе отсортирован? Будете и дальше бегать?
0
SlavaSSU
217 / 162 / 47
Регистрация: 17.07.2012
Сообщений: 587
18.06.2014, 20:58 #19
лол! массив из 9 элементов! тут хоть все перестановки сгенерируй, быстро работать будет!
0
MMt
0 / 0 / 6
Регистрация: 29.04.2014
Сообщений: 176
20.06.2014, 23:45  [ТС] #20
для проверки работоспособности программы можно и в 3 элемента массив создать. чтоб не ждать по 10 секунд сортировку массивов на 100 000 элементов.

 Комментарий модератора 
Аккуратнее с выражениями.
0
20.06.2014, 23:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.06.2014, 23:45
Привет! Вот еще темы с решениями:

Не сортируется массив пузырьком
Не получается нормально отсортировать массив( И оператор выбора не работает,...

Определить время, за которое сортируется массив
Подскажите как узнать время за которое отсортировался массив (mas) Внизу...

Неправильно сортируется массив по возрастанию и не находится минимальный элемент
#include &lt;windows.h&gt; #include &lt;iostream.h&gt; #include &lt;math.h&gt; #include...

Почему возможно задать массив с размером -1 (почему такое вообще компилируется)?
Всем привет. Долгое время не писал на плюсах, решил пройтись по основам,...


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

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

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