Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
sanchoflat
4 / 6 / 1
Регистрация: 05.11.2011
Сообщений: 97
#1

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

07.10.2012, 20:28. Просмотров 1345. Ответов 9
Метки нет (Все метки)

Не понимаю, в чем проблема при сортировке пузырьком.
сортирую структуру:
C++
1
2
3
4
5
6
7
8
9
10
11
12
for (int i=0; i<4; i++) 
            {
        for (int j=n-1; j>i; j--)
        {
            if (strcmp(stran[j].naim, stran[j-1].naim)<0)
            {
                t = stran[j];
                stran[j] = stran[j-1];
                stran[j-1] = t;
            }
        }
        }
вроде сортирует, но результат далеко не тот что нужен
подскажите что не так
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2012, 20:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка пузырьком (C++):

Сортировка пузырьком - C++
Здравствуйте! Решаю задачу:пользователь вводит слова через пробел,я должен вывести их в алфавитном порядке.Моя проблема в сортировке.Что...

Сортировка пузырьком - C++
вот написала программу но не работает :( #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;ctime&gt; #include &lt;cstdlib&gt; using...

Сортировка пузырьком - C++
Всем доброго времени суток. Помогите пожалуйста написать программу сортировки пузырьком в соответствии с данной блок-схемой.

Сортировка пузырьком - C++
Правильно ли организую ввод размера массива через клавиатуру?Если неправильно-то как? #include &lt;stdio.h&gt;; #include &lt;stdlib.h&gt;; ...

Сортировка Пузырьком :) - C++
Привет, ребята :) Вообщем, наткнулся на написание программы с использованием сортировки пузырьком. Никогда не использовал :) Часть кода...

Сортировка пузырьком - C++
Нужно отсортировать два динамических массива методом пузырька. Не могу понять в чем ошибка, помогите пожалуйста. #include &quot;stdafx.h&quot; ...

9
DU
1484 / 1130 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
07.10.2012, 20:51 #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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
 
void printArray(int* arr, unsigned size)
{
  for (unsigned i = 0; i < size; ++i)
  {
    std::cout << arr[i] << "  ";
  }
  std::cout << std::endl;
}
 
int main()
{
 
  int arr[10];
  const unsigned arrSize = sizeof(arr) / sizeof(*arr);
  for (int i = 0; i < arrSize; ++i)
  {
    arr[i] = arrSize - i;
  }
 
  printArray(arr, arrSize);
 
  for (int i = 0; i < arrSize - 1; ++i)
  {
    for (int j = i + 1; j < arrSize; ++j)
    {
      if (arr[j] < arr[i])
      {
        const int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
      }
    }
  }
 
  printArray(arr, arrSize);
 
  return 0;
}
0
panicwassano
592 / 560 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
07.10.2012, 20:54 #3
Цитата Сообщение от sanchoflat Посмотреть сообщение
вроде сортирует, но результат далеко не тот что нужен
подскажите что не так
что такое n?
0
sanchoflat
4 / 6 / 1
Регистрация: 05.11.2011
Сообщений: 97
07.10.2012, 21:04  [ТС] #4
n - количество записей в файле. пробовал n менять на число. 4 записи в каждом массиве. уже разные варианты пузырька пробовал, но никак.
такой тест:
исходный массив: Russia France Italy Austria
отсортированный: France Italy Russia Austria

Добавлено через 1 минуту
panicwassano,
с вашим вариантом такой же результат
0
panicwassano
592 / 560 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
07.10.2012, 21:23 #5
весь код давайте сюда
0
sanchoflat
4 / 6 / 1
Регистрация: 05.11.2011
Сообщений: 97
07.10.2012, 21:28  [ТС] #6
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
struct tovar 
{
    char strani[max_dlina];
    char naim[max_dlina];
    int kolvo;
    char vvod;
};
.....
fscanf(pfile,"%s%s%d%d", &stran[i].strani,&stran[i].naim,&stran[i].kolvo); //считываю значения
 
...
switch(choise)
    {
    case 1:
        {
            for (int i=0; i<n-1; ++i) 
            {
        for (int j=i+1; j<n; ++j)
        {
            if (strcmp(stran[j].naim, stran[j-1].naim)<0)
            {
                t = stran[j];
                stran[j] = stran[j-1];
                stran[j-1] = t;
            }
        }
        }
            vivod(stran,n);
            break;
        }
    
    case 2:
        {
            for (int i=0; i<n-1; ++i) 
            {
        for (int j=i+1; j<n; ++j)
        {
            if (stran[j].kolvo>stran[j-1].kolvo)
            {
                t = stran[j];
                stran[j] = stran[j-1];
                stran[j-1] = t;
            }
        }
            }
            vivod(stran,n);
            break;
        }
        
        
        
        case 3:
        exit(0);
    }
    
}
Добавлено через 1 минуту
а вот поле с kolvo вообще не сортирует
0
David Sylva
1289 / 951 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
07.10.2012, 21:28 #7
Мне кажется неправильно передаёшь в цикле имена надо через strcpy. Например так

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>  
 
int main() 
{ 
    char str [4][20] = { "Russia", "France", "Italy", "Austria" }; 
    int i, j; 
 
    for ( i = 0; i < 4 - 1; i++) 
        for ( j = 0; j < 4 - 1; j++) 
        { 
            if(strcmp(str[j], str[j+1]) > 0) 
            { 
                char temp[20]; 
                strcpy(temp, str[j]); 
                strcpy(str[j], str[j+1]); 
                strcpy(str[j+1], temp); 
            } 
        } 
 
        for ( i = 0; i < 4; i++) 
            std::cout << str[i] << " "; 
        std::cout << std::endl;
}
0
sanchoflat
4 / 6 / 1
Регистрация: 05.11.2011
Сообщений: 97
07.10.2012, 21:44  [ТС] #8
David Sylva,
спасибо большое - сортирует на ура. смотрел просто похожую работу, там без strcpy и вроде все работает.


Добавлено через 4 минуты
проблема в том, что в моем варианте если я меняю страны, то я меняю и наименование и количество, если же ваш вариант, то я просто меняю значения.
0
David Sylva
1289 / 951 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
07.10.2012, 21:52 #9
передавай числовые значения в соответсвии с тем как сортируешь имена стран. Опиши всё задание.
0
sanchoflat
4 / 6 / 1
Регистрация: 05.11.2011
Сообщений: 97
07.10.2012, 22:11  [ТС] #10
задание - создать структуры с 3 полями - 1 числовое и 2 символьных. и отсортировать по двум из них по выбору.

вобщем немного попробовав - сортирует по количеству, но выводит в обратном порядке - но это исправим.
но при такой же сортировки для поля со странами - выдает немного не то.

Добавлено через 14 минут
всем спасибо, вопрос закрыт) видимо от того что целый день делаю - уже совсем запутался - сортировал по одному полю, а смотрел на другое))
0
07.10.2012, 22:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2012, 22:11
Привет! Вот еще темы с ответами:

Сортировка пузырьком - C++
#include &lt;stdio.h&gt; #include &lt;iostream&gt; #include &lt;conio.h&gt; #define M 10 void main() { int i,j,n,k; int m; ...

сортировка пузырьком - C++
Вечер добрый! Задача проста: отсортировать сначала по зп, если &lt; 400, то в 1ый список, а если больше, то во второй, отсортировав по...

сортировка пузырьком - C++
#include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;ctime&gt; using namespace std; int main(int argc, char *argv) { ...

Сортировка пузырьком - C++
Всем доброго времени суток! Я новичек в С++.У меня глупая ситуация: недавно написал код сортировки на C++, и сегодня решил...


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

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

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