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

Варианты сортировок - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.89
fygaska
4 / 4 / 1
Регистрация: 18.10.2010
Сообщений: 27
23.12.2010, 15:30     Варианты сортировок #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
#include <iostream>
using namespace std;
int main ()
{
    const int n=20;
    int b[n];
    int i, a, j;
    for (i=0; i<n; i++)
    {
        cin>>b[i];
    }
    for (i=0; i<n-1; i++)
    {
        for (j=i+1; j<n; j++)
        {
            if(b[j]<b[i]){
            a=b[i];
            b[i]=b[j];
            b[j]=a;
            }
        }
    }
    for (i=0; i<n; i++)
    {
        cout<<b[i]<<" ";
    }
    return 0;
}
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
#include <iostream>
using namespace std;
int main ()
{
    const int n=20;
    int b[n];
    int i, a, j;
    for (i=0; i<n; i++)
    {
        cin>>b[i];
    }
    for (i=0; i<n-1; i++)
    {
        int imin=i;
        for (j=i+1; j<n; j++)
        {
            if(b[j]<b[imin]) imin=j;
            a=b[i];
            b[i]=b[imin];
            b[imin]=a;
            
        }
    }
    for (i=0; i<n; i++)
    {
        cout<<b[i]<<" ";
    }
    return 0;
}
Они делают одно и тоже, но во втором случае добавлены некоторые присваивания. Второй пример взят из учебника. А первый - отредоктированный второй, я просто выкинул лишние выражения. объясните пожалуйста для чего они были нужны, может зря я их выкинул. И почему условие, написано как то странно, никак не могу его разобрать. В нем нет фигурных скобок.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.12.2010, 15:30     Варианты сортировок
Посмотрите здесь:

C++ Алгоритмы сортировок
Алгоритмы сортировок C++
меню сортировок C++
Алгоритмы сортировок C++
Сравнение алгоритмов сортировок C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
23.12.2010, 16:37     Варианты сортировок #2
fygaska, Во второй сортировке ошибка. Ваш вариант будет сортировать. Скорее всего второй вариант подрузамевался таким:
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
#include <iostream>
using namespace std;
int main ()
{
    const int n=20;
    int b[n];
    int i, a, j;
    for (i=0; i<n; i++)
    {
        cin>>b[i];
    }
    for (i=0; i<n-1; i++)
    {
        int imin=i;
        for (j=i+1; j<n; j++)
            if(b[j]<b[imin]) imin=j;
        a=b[i];
        b[i]=b[imin];
        b[imin]=a;
    }
    for (i=0; i<n; i++)
    {
        cout<<b[i]<<" ";
    }
    return 0;
}
fygaska
4 / 4 / 1
Регистрация: 18.10.2010
Сообщений: 27
23.12.2010, 17:01  [ТС]     Варианты сортировок #3
я так понял, если при цикле или при условии нет фигурных скобок, то к ним относится только:
-следующая строка (только одна)
-выражение до знака ";"
правильно понял?

Добавлено через 5 минут
да и смысл впрнципе не в этом. Вопрос в том, зачем делать лишнии присваивания. Для чего они нужны. Разве при первом варианте не проще будет?
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
23.12.2010, 17:07     Варианты сортировок #4
Цитата Сообщение от fygaska Посмотреть сообщение
правильно понял?
лучше так:
-строка до знака ";"

Добавлено через 5 минут
Цитата Сообщение от fygaska Посмотреть сообщение
Разве при первом варианте не проще будет?
Вот именно в первом варианте у Вас лишние присваивания.
Цитата Сообщение от fygaska Посмотреть сообщение
for (i=0; i<n-1; i++)
{
for (j=i+1; j<n; j++)// в этом цикле при каждом новом проходе (при каждом новом i) на место b[i] ставится несколько элементов из оставшейся части массива
{
if(b[j]<b[i]){
a=b[i];
b[i]=b[j];
b[j]=a;
}
}
}
C++
1
2
3
4
5
6
7
8
9
  for (i=0; i<n-1; i++)
    {
        int imin=i;
        for (j=i+1; j<n; j++)// а здесь просто ищется индекс минимального элемента из оставшейся части массива, но ничего не переставляется
            if(b[j]<b[imin]) imin=j;
        a=b[i];// а вот здесь перестановка одна единственная при каждом новом i
                b[i]=b[imin];
                b[imin]=a;
        }
fygaska
4 / 4 / 1
Регистрация: 18.10.2010
Сообщений: 27
23.12.2010, 17:25  [ТС]     Варианты сортировок #5
Эврика!!!!
До меня дошло! Понял!!!
Yandex
Объявления
23.12.2010, 17:25     Варианты сортировок
Ответ Создать тему
Опции темы

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