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

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

18.06.2014, 19:05. Показов 1132. Ответов 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;
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.06.2014, 19:05
Ответы с готовыми решениями:

Почему не сортируется массив?
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; using namespace std; int main() {...

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

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

Почему не сортируется вектор структур?
Выводится ошибка c:\qtsdk\mingw\bin\..\lib\gcc\mingw32\4.4.0\include\c++\bits\stl_algo.h:89: error:...

19
Котовчанин
940 / 480 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
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
0 / 0 / 0
Регистрация: 16.06.2014
Сообщений: 19
18.06.2014, 19:13 3
Сортировки в один цыкл не существует. Как минимум в два цикла.

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

Решение

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

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

Цитата Сообщение от Тамика Посмотреть сообщение
Я вот вложилась.
У вас два цикла, или глаза меня подводят?
0
Котовчанин
940 / 480 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
18.06.2014, 19:25 8
Цитата Сообщение от LifeMoroz Посмотреть сообщение
У вас два цикла, или глаза меня подводят?
Внутренний вайл, разве что, может Вас смущать. Но его можно заменить ифом. И всё.
А могу и ровно в один цикл.
0
569 / 537 / 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
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 183
18.06.2014, 19:28  [ТС] 10
доперло спасибо)
0
11 / 11 / 5
Регистрация: 12.10.2013
Сообщений: 54
18.06.2014, 19:28 11
Цитата Сообщение от Тамика Посмотреть сообщение
Внутренний вайл, разве что, может Вас смущать. Но его можно заменить ифом. И всё.
А могу и ровно в один цикл.
Если честно, весьма интересно, как вы реализуете пузырек в 1 цикл.
0
Котовчанин
940 / 480 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
18.06.2014, 19:28 12
Цитата Сообщение от LifeMoroz Посмотреть сообщение
Если честно, весьма интересно, как вы реализуете пузырек в 1 цикл.
При чём здесь пузырёк? Я говорю об алгоритмах сортировки. И в своём коде у меня не пузырёк.
0
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 183
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
11 / 11 / 5
Регистрация: 12.10.2013
Сообщений: 54
18.06.2014, 19:33 14
Цитата Сообщение от Тамика Посмотреть сообщение
При чём здесь пузырёк?
Потому что в аффтор написал (пусть не работающий) пузырек, может быть я ошибаюсь, но это привело меня к выводу что мы говорим об этом алгоритме.
Прошу прощения, что Вас не понял.
0
Котовчанин
940 / 480 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
18.06.2014, 19:33 15
Цитата Сообщение от MMt Посмотреть сообщение
for(int k=0; k<s;k++){
А это зачем?..
0
Котовчанин
940 / 480 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 37
18.06.2014, 19:34 16
Цитата Сообщение от LifeMoroz Посмотреть сообщение
Потому что в аффтор написал (пусть не работающий) пузырек, может быть я ошибаюсь, но это привело меня к выводу что мы говорим об этом алгоритме.
Прошу прощения, что Вас не понял.
Бывает.
0
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 183
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
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
219 / 164 / 47
Регистрация: 17.07.2012
Сообщений: 587
18.06.2014, 20:58 19
лол! массив из 9 элементов! тут хоть все перестановки сгенерируй, быстро работать будет!
0
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 183
20.06.2014, 23:45  [ТС] 20
для проверки работоспособности программы можно и в 3 элемента массив создать. чтоб не ждать по 10 секунд сортировку массивов на 100 000 элементов.

 Комментарий модератора 
Аккуратнее с выражениями.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.06.2014, 23:45

Помощь в написании контрольных, курсовых и дипломных работ здесь.

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

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

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

Двумерный динамический массив не сортируется
Вместо того, чтобы работать, программа вдруг стала крашиться, хотя до этого выдавала ошибки,...


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

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

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