Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 168
18.06.2014, 19:05     Почему не сортируется массив? #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
#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;
}
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,537
Записей в блоге: 27
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");
}
Nicolas
0 / 0 / 0
Регистрация: 16.06.2014
Сообщений: 19
18.06.2014, 19:13     Почему не сортируется массив? #3
Сортировки в один цыкл не существует. Как минимум в два цикла.

http://kvodo.ru/puzyirkovaya-sortirovka.html
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,537
Записей в блоге: 27
18.06.2014, 19:13     Почему не сортируется массив? #4
Цитата Сообщение от Nicolas Посмотреть сообщение
Сортировки в один цыкл не существует. Как минимум в два цикла.
Я вот вложилась.
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 168
18.06.2014, 19:21  [ТС]     Почему не сортируется массив? #5
что то вы меня совсем запутали как это не существует? простой массив в 1 строку... если А больше Б то прост поменять их местами. в чем проблема? почему так нельзя сделать?
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,537
Записей в блоге: 27
18.06.2014, 19:23     Почему не сортируется массив? #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от MMt Посмотреть сообщение
что то вы меня совсем запутали как это не существует? простой массив в 1 строку... если А больше Б то прост поменять их местами. в чем проблема? почему так нельзя сделать?
о_О Вы меня удивляете.
Есть у Вас - 6 5 8 1.
По Вашему алгоритму -
6 больше 5, меняем местами.
Получаем 5 6 8 1.
Шесть меньше восьми, пропускаем.
Восемь больше единицы - меняем.
Получаем 5 6 1 8.
Всё. Конец.
Почему же не отсортирован массив?
LifeMoroz
11 / 11 / 3
Регистрация: 12.10.2013
Сообщений: 54
18.06.2014, 19:24     Почему не сортируется массив? #7
Цитата Сообщение от Nicolas Посмотреть сообщение
Сортировки в один цыкл не существует. Как минимум в два цикла.
Почему простите?
Простейший пример
сортировка массива при помощи одного цикла

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

Цитата Сообщение от Тамика Посмотреть сообщение
Я вот вложилась.
У вас два цикла, или глаза меня подводят?
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,537
Записей в блоге: 27
18.06.2014, 19:25     Почему не сортируется массив? #8
Цитата Сообщение от LifeMoroz Посмотреть сообщение
У вас два цикла, или глаза меня подводят?
Внутренний вайл, разве что, может Вас смущать. Но его можно заменить ифом. И всё.
А могу и ровно в один цикл.
cooller
 Аватар для cooller
564 / 532 / 120
Регистрация: 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 не меньше нуля

в вообще вот, учи
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 168
18.06.2014, 19:28  [ТС]     Почему не сортируется массив? #10
доперло спасибо)
LifeMoroz
11 / 11 / 3
Регистрация: 12.10.2013
Сообщений: 54
18.06.2014, 19:28     Почему не сортируется массив? #11
Цитата Сообщение от Тамика Посмотреть сообщение
Внутренний вайл, разве что, может Вас смущать. Но его можно заменить ифом. И всё.
А могу и ровно в один цикл.
Если честно, весьма интересно, как вы реализуете пузырек в 1 цикл.
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,537
Записей в блоге: 27
18.06.2014, 19:28     Почему не сортируется массив? #12
Цитата Сообщение от LifeMoroz Посмотреть сообщение
Если честно, весьма интересно, как вы реализуете пузырек в 1 цикл.
При чём здесь пузырёк? Я говорю об алгоритмах сортировки. И в своём коде у меня не пузырёк.
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 168
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;    
            }
        }
    }
LifeMoroz
11 / 11 / 3
Регистрация: 12.10.2013
Сообщений: 54
18.06.2014, 19:33     Почему не сортируется массив? #14
Цитата Сообщение от Тамика Посмотреть сообщение
При чём здесь пузырёк?
Потому что в аффтор написал (пусть не работающий) пузырек, может быть я ошибаюсь, но это привело меня к выводу что мы говорим об этом алгоритме.
Прошу прощения, что Вас не понял.
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,537
Записей в блоге: 27
18.06.2014, 19:33     Почему не сортируется массив? #15
Цитата Сообщение от MMt Посмотреть сообщение
for(int k=0; k<s;k++){
А это зачем?..
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,537
Записей в блоге: 27
18.06.2014, 19:34     Почему не сортируется массив? #16
Цитата Сообщение от LifeMoroz Посмотреть сообщение
Потому что в аффтор написал (пусть не работающий) пузырек, может быть я ошибаюсь, но это привело меня к выводу что мы говорим об этом алгоритме.
Прошу прощения, что Вас не понял.
Бывает.
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 168
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 минуту
как зачем? я цикл прогоняю такое количество раз, сколько у меня элементов в цикле. чтоб каждый элемент поставить на свое место
LifeMoroz
11 / 11 / 3
Регистрация: 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]

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

как зачем? я цикл прогоняю такое количество раз, сколько у меня элементов в цикле. чтоб каждый элемент поставить на свое место
А если он будет еще на первом проходе отсортирован? Будете и дальше бегать?
SlavaSSU
213 / 158 / 44
Регистрация: 17.07.2012
Сообщений: 580
18.06.2014, 20:58     Почему не сортируется массив? #19
лол! массив из 9 элементов! тут хоть все перестановки сгенерируй, быстро работать будет!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.06.2014, 23:45     Почему не сортируется массив?
Еще ссылки по теме:

C++ Почему данная реализация связного списка не сортируется по убыванию?
C++ Почему не сортируется массив?
C++ Блинная сортировка массива, не сортируется последний элемент

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

Или воспользуйтесь поиском по форуму:
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 168
20.06.2014, 23:45  [ТС]     Почему не сортируется массив? #20
для проверки работоспособности программы можно и в 3 элемента массив создать. чтоб не ждать по 10 секунд сортировку массивов на 100 000 элементов.

 Комментарий модератора 
Аккуратнее с выражениями.
Yandex
Объявления
20.06.2014, 23:45     Почему не сортируется массив?
Ответ Создать тему
Опции темы

Текущее время: 00:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru