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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
[WRG]
50 / 50 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
#1

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

12.04.2012, 18:36. Просмотров 392. Ответов 4
Метки нет (Все метки)

Программа заполняет массив из 10 элементов рандомными числами от 1 до 100, выводит исходный массив, потом сортирует его методом пузырька и снова выводит.
проблема в том что заполняет и выводит массив программа как надо, а вот дольше дело не идет, либо она вобще не меняет элементы местами, либо меняет только одну пару.
грешу на выход индекса массива из диапазона, но сколько не смотрел, вроде все правильно.
помогите разобраться в проблеме)

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
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <iostream>
#include <time.h>
#include <cstdlib>
using namespace std;
 
void fill_array(int ranmax, int size_of_arr);
void output_array(int size_of_arr);
void sort_array(int size_of_arr);
 
int array[10];   //массив на 10 элементов
 
int main()
{
    setlocale(LC_ALL,"Russian");
    //int i,j,temp;
    fill_array(100, 10);
    cout << "Исходный массив:\n";
    output_array(10);
    sort_array(10);
    cout << "Отсортированный массив:\n";
    output_array(10);
    return 0;
}
 
void fill_array(int ranmax, int size_of_arr)
{
    srand(time(NULL));
    for(int i=0; i < size_of_arr; i++)
      {
          array[i] = 1 + rand() % ranmax;
      }
}
 
void output_array(int size_of_arr)
{
    for(int i=0; i < size_of_arr; i++)
      {
          cout << array[i] << ' ';
      }
    cout  << '\n';
}
 
void sort_array(int size_of_arr)
{
    int i,j,temp;
    for (i = 0; i < size_of_arr-1; i++)
    {
      for (j = 0; j < size_of_arr-1; i++)
      {
        if (array[j+1]<array[j])
          {
              cout << "Обмен\n";
              temp = array[j+1];
              array[j+1] = array[j];
              array[j] = temp;
          }
      }
    }
 
}
да я использую Codeblocs + GCC
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.04.2012, 18:36     Ошибка сортировки пузырьком
Посмотрите здесь:

Функция для сортировки массива пузырьком C++
Написать функцию сортировки пузырьком массива C++
Сортировка пузырьком, в чем ошибка C++
Метод сортировки "пузырьком" C++
C++ вывод сортировки пузырьком
C++ Написать программу для сортировки массива способами шелла вставки слияния и пузырьком
Оптимизация сортировки пузырьком C++
Сортировка пузырьком ошибка C++
Метод сортировки пузырьком C++ C++
C++ Ошибка в сортировке пузырьком
C++ Распараллелить алгоритм сортировки "пузырьком"
C++ С помощью сортировки пузырьком упорядочить элементы матрицы, находящиеся ниже главной диагонали

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
4667 / 2493 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
12.04.2012, 19:09     Ошибка сортировки пузырьком #2
см комментарии:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void sort_array(int size_of_arr)
{
    int i,j,temp;
    for (i = 0; i < size_of_arr-1; i++)
    {
      for (j = 0; j < size_of_arr-1; i++)// i++ заменить на ... (наверное сами уже догадались)
      {
        if (array[j+1]<array[j])
          {
              cout << "Обмен\n";
              temp = array[j+1];
              array[j+1] = array[j];
              array[j] = temp;
          }
      }
    }
 
}
[WRG]
50 / 50 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
12.04.2012, 19:20  [ТС]     Ошибка сортировки пузырьком #3
вы имеете в виду вот это
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void sort_array(int size_of_arr)
{
    int i,j,temp;
    for (i = 0; i < size_of_arr-1; i++)
    {
      for (j = size_of_arr; j >=; i--)// i++ заменить на ... (наверное сами уже догадались)
      {
        if (array[j-1]<array[j])
          {
              cout << "Обмен\n";
              temp = array[j-1];
              array[j-1] = array[j];
              array[j] = temp;
          }
      }
    }
 
}
поменял так же плюсы на минусы в сомом обмене элементов. не работает все равно.
valeriikozlov
Эксперт C++
4667 / 2493 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
12.04.2012, 19:24     Ошибка сортировки пузырьком #4
Ладно давайте так:
вот это:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void sort_array(int size_of_arr)
{
    int i,j,temp;
    for (i = 0; i < size_of_arr-1; i++)
    {
      for (j = 0; j < size_of_arr-1; i++)
      {
        if (array[j+1]<array[j])
          {
              cout << "Обмен\n";
              temp = array[j+1];
              array[j+1] = array[j];
              array[j] = temp;
          }
      }
    }
 
}
меняйте на это:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void sort_array(int size_of_arr)
{
    int i,j,temp;
    for (i = 0; i < size_of_arr-1; i++)
    {
      for (j = 0; j < size_of_arr-1; j++)
      {
        if (array[j+1]<array[j])
          {
              cout << "Обмен\n";
              temp = array[j+1];
              array[j+1] = array[j];
              array[j] = temp;
          }
      }
    }
 
}
и все заработает.

Добавлено через 52 секунды

Не по теме:

видимо не сами код писали

[WRG]
50 / 50 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
12.04.2012, 19:30  [ТС]     Ошибка сортировки пузырьком #5
ааааа черт благодарствую)
код писал как раз сам) просто второй день с++ изучаю) надо привыкнуть вместо j использовать другую переменную, а то i и j почти не отличимы. шрифт в редакторе поменять
еще раз спасибо
Yandex
Объявления
12.04.2012, 19:30     Ошибка сортировки пузырьком
Ответ Создать тему
Опции темы

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