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

сортировка пузырьком - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.70
xexew
0 / 0 / 0
Регистрация: 22.02.2011
Сообщений: 76
11.09.2011, 22:59     сортировка пузырьком #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
#include <iostream>
using namespace std;
void main()
{
const n=4;
int a[n],i,j,buffer;
for(i=0;i<n;i++)
cin>>a[i];
 
for (i=0; i<n-1; i++) 
    for (j=i; j>=0; j--) 
        if (a[j] > a[j+1]) 
        {
         buffer=a[i];
         a[i]=a[j];
         a[j]=buffer;
        }
for(i=0;i<n;i++)
cout<<"a["<<i<<"]="<<a[i]<<endl;
 
 
 
}
входные данные: 5 3 10 2
исходные: 3 5 10 2
будьте добры, подскажите как сделать что бы он еще один круг сортировал
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2011, 22:59     сортировка пузырьком
Посмотрите здесь:

сортировка пузырьком C++
Сортировка пузырьком. C++
Сортировка пузырьком C++
C++ Сортировка пузырьком
C++ Сортировка пузырьком
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
11.09.2011, 23:07     сортировка пузырьком #2
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
#include <iostream>
 
using namespace std;
int main()
{
const int n=4;
int a[n],i,j,buffer;
for(i=0;i<n;i++)
cin>>a[i];
 
for (i=0; i<n-1; i++) 
    for (j=i; j<n; j++) 
        if (a[j] < a[j+1]) 
                {
                 buffer=a[i];
                 a[i]=a[j];
                 a[j]=buffer;
                }
for(i=0;i<n;i++)
cout<<"a["<<i<<"]="<<a[i]<<endl;
system ("pause"); 
 
 
}
xexew
0 / 0 / 0
Регистрация: 22.02.2011
Сообщений: 76
11.09.2011, 23:13  [ТС]     сортировка пузырьком #3
все равно не правильно работает
Rexer
 Аватар для Rexer
151 / 150 / 19
Регистрация: 10.10.2010
Сообщений: 691
11.09.2011, 23:16     сортировка пузырьком #4
А как вам это?
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
#include<stdio.h>
#define N 1000
int
main()
{
   int n, i;
   int a[N];
   scanf("%d", &n);
   for(i = 0 ; i < n; i++)
   {
       scanf("%d", &a[i]);
   }
   for(i = 0 ; i < n-1 ; i++)
   {
      for(j = i + 1 ; j < n ; j++)
      {
          if(a[i] > a[j])
          {
             int tmp = a[i]; a[i] = a[j] ; a[j] = tmp;
          }
       }
   }
   for(i = 0 ; i < n; i++)
   {
       printf("%d ", a[i]);
   }
   return 0;
}
Можно впринципе еще и циклы просто от 0 до n сделать.
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
11.09.2011, 23:16     сортировка пузырьком #5
у меня все правильно, что у Вас не так?
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
11.09.2011, 23:18     сортировка пузырьком #6
Вот скрин
Миниатюры
сортировка пузырьком  
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
11.09.2011, 23:19     сортировка пузырьком #7
понял, проблема в другом
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
11.09.2011, 23:20     сортировка пузырьком #8
C++
1
2
3
4
5
6
7
for (i=0; i<n-1; i++) 
    for (j=i; j<n; j++) 
        if (a[j] < a[j+1]) 
        {
            buffer=a[i];
            a[i]=a[j];
            a[j]=buffer;
Вот тут случаем не будет выхода за границы массива?
xexew
0 / 0 / 0
Регистрация: 22.02.2011
Сообщений: 76
11.09.2011, 23:21  [ТС]     сортировка пузырьком #9
допустим вводим данные: 33 13 20 14 22 5 10 1 2 3
выводит: 2 1 5 10 14 22 33 20 13 3
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
11.09.2011, 23:23     сортировка пузырьком #10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
const int n=4;
int a[n],i,j,buffer;
for(i=0;i<n;i++)
cin>>a[i];
 
for (i=0; i<=n; i++) 
    for (j=0; j<n-i; j++) 
        if (a[j] > a[j+1]) swap (a[j],a[j+1]);
for(i=0;i<n;i++)
cout<<"a["<<i<<"]="<<a[i]<<endl;
system ("pause"); 
 
 
}
RUSya82
 Аватар для RUSya82
236 / 114 / 3
Регистрация: 15.10.2010
Сообщений: 395
11.09.2011, 23:31     сортировка пузырьком #11
"Алгоритм состоит в повторяющихся проходах по сортируемому массиву. За каждый проход элементы последовательно сравниваются попарно и, если порядок в паре неверный, выполняется обмен элементов. Проходы по массиву повторяются до тех пор, пока на очередном проходе не окажется, что обмены больше не нужны, что означает — массив отсортирован." - это из Википедии.
Обратите внимание на последнее предложение. В зависимости от степени упорядоченности исходного массива может потребоваться разное количество проходов по нему. Так где контроль того, упорядочен ли массив?
xexew
0 / 0 / 0
Регистрация: 22.02.2011
Сообщений: 76
11.09.2011, 23:34  [ТС]     сортировка пузырьком #12
warning C4508: 'main' : function should return a value; 'void' return type assumed
warning C4101: 'buffer' : unreferenced local variable

первое решается добавлением return 0;
а второе?
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
11.09.2011, 23:36     сортировка пузырьком #13
у меня все идет, что у Вас за компилятор? и попробуйте убрать buffer, за него действует swap
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
11.09.2011, 23:39     сортировка пузырьком #14
unreferenced
Не используемая.
Учите английский. Ну или Гугл транслейт вам в помощь.
xexew
0 / 0 / 0
Регистрация: 22.02.2011
Сообщений: 76
11.09.2011, 23:42  [ТС]     сортировка пузырьком #15
ms visual 6.0 c++
ms vs 2005

оба с ошибкой работают
Миниатюры
сортировка пузырьком  
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
11.09.2011, 23:44     сортировка пузырьком #16
хм...

Добавлено через 1 минуту
у меня опять же все правильно! (Даже смешно уже как-то )
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
11.09.2011, 23:45     сортировка пузырьком #17
Вот доказательство
Миниатюры
сортировка пузырьком  
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
11.09.2011, 23:53     сортировка пузырьком #18
C++
1
2
3
4
for (i=0; i<=n; i++) 
    for (j=0; j<n-i; j++) 
        if (a[j] > a[j+1]) 
            swap (a[j],a[j+1]);
Выход за границы массива. При i = 0, j в последней итерации будет равно n - 0, и в блоке if выход при j +1.
И совсем необязательно брать i до n включительно. Все равно второй цикл при i = n не запустится.

Добавлено через 1 минуту
Поправка - j будет равен n - 0 - 1(т.к. n не включительно. Но сути не меняет)
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
11.09.2011, 23:53     сортировка пузырьком #19
у меня на двух копиляторах, два разных результата показывает
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2011, 23:58     сортировка пузырьком
Еще ссылки по теме:

Сортировка Пузырьком :) C++
C++ Сортировка пузырьком
C++ Сортировка пузырьком

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

Или воспользуйтесь поиском по форуму:
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
11.09.2011, 23:58     сортировка пузырьком #20
у меня на двух копиляторах, два разных результата показывает
Это очевидно. Никто не знает точно, какие данные будут за границей массива.
Yandex
Объявления
11.09.2011, 23:58     сортировка пузырьком
Ответ Создать тему
Опции темы

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