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

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

Войти
Регистрация
Восстановить пароль
 
wolf
2 / 2 / 1
Регистрация: 17.09.2012
Сообщений: 860
#1

сортировка массива выбором - C++

18.06.2013, 20:00. Просмотров 591. Ответов 15

программисты на ваш взгляд это правильный код?

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
#include "stdafx.h"
#include "iostream"
#include "time.h"
#include "iomanip"
 
using namespace std;
 
void ChoicesSort(int*, int); // объявление функции сортировки
 
int main()
{
setlocale(LC_ALL, "Russian");
int n; // Количество элементов массива
cout << "Введите размер массива: ";
cin >> n;
cout << endl;
cout << "Массив: " << endl;
int *mas = new int [n]; 
srand(time(NULL));
for (int i = 0; i < n; i++)
{
mas[i] = rand() % 200 - 100; // заполняем массив случайными числами
cout << mas[i] << " "; // выводим массив на экран
}
cout << "\n\n";
 
ChoicesSort(mas, n); // вызываем функцию сортировки Выбором
cout << "Отсортированный массив: " << endl;
for (int i = 0; i < n; i++)
{
cout << mas[i] << " "; // Вывод на экран отсортированного массива
}
cout << "\n";
system("PAUSE");
return 0;
}
 
void ChoicesSort(int* Perestanovka, int length) // сортировка Выбором
{
for (int j = 0; j < length; j++)
{
int temp = Perestanovka[0]; // временная переменная, храненящая значения перестановки
for (int z = j + 1; z < length; z++)
{
if (Perestanovka[j] > Perestanovka[z])
{
temp = Perestanovka[j]; 
Perestanovka[j] = Perestanovka[z];
Perestanovka[z] = temp;
}
}
}
}
Добавлено через 2 минуты
и подскажите пожалуйста ещё, для чего записывается, временная переменная хранящая значения перестановки?
int temp = Perestanovka[0]; // временная переменная, храненящая значения перестановки
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2013, 20:00     сортировка массива выбором
Посмотрите здесь:

Сортировка массива выбором - C++
Просматриваются все элементы массива и находится максимальный. Он обменивается местом с последним элементом. Затем просматриваются...

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

Сортировка выбором столбцов двумерного массива - C++
Здравствуйте! Перечитал на форуме все что только смог найти связанное с сортировкой выбором. Проблема заключается в том что в основном все...

Сортировка одномерного массива выбором - в чем ошибка - C++
Всем привет. Пытаюсь написать алгоритм, который будет сортировать одномерный массив заданной длины: 1. находить минимум среди элементов, ...

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

сортировка выбором - C++
нужно сделать вместо сортировки пузырьком, сортировку выбором, помогите пожалуйста void bubble(int a) { for (int i = 0; i&lt;70;...

Сортировка выбором - C++
Выбираeтся минимaльный элeмeнт в мaссивe и пeрeнoсится в нoвый массив. 3aтем нa его местo записывается последний элемент исходного массива.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Модератор
Эксперт CЭксперт С++
6997 / 4168 / 594
Регистрация: 29.11.2010
Сообщений: 11,047
18.06.2013, 20:01     сортировка массива выбором #2
Цитата Сообщение от wolf Посмотреть сообщение
#include "stdafx.h"
#include "iostream"
#include "time.h"
#include "iomanip"
сразу нет. Почитайте как включают стандартные заголовочные файлы.

Отступов нет, дальше не смотрел. Но называть функции с заглавной буквы - моветон
Thinker
Эксперт C++
4221 / 2195 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
18.06.2013, 20:03     сортировка массива выбором #3
алгоритм верный, а это
Цитата Сообщение от wolf Посмотреть сообщение
int temp = Perestanovka[0];
излишне
при этом сам алгоритм не из лучших, он не учитывает упорядоченность массива
wolf
2 / 2 / 1
Регистрация: 17.09.2012
Сообщений: 860
18.06.2013, 20:04  [ТС]     сортировка массива выбором #4
MrGluck хм где должны быть отступы? вроде так везде

#include "stdafx.h"
#include "iostream"
#include "time.h"
#include "iomanip"
заглавных ведь букв тут нету)

Добавлено через 39 секунд
как грамотней его написать?
Thinker
Эксперт C++
4221 / 2195 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
18.06.2013, 20:07     сортировка массива выбором #5
Цитата Сообщение от wolf Посмотреть сообщение
как грамотней его написать?
скажем так. алгоритм, который вы привели, для детей детского сада. смотрите в сторону тех сортировок, которые учитывают упорядоченность (например, шейкерная, оптимизированная пузырьковая), далее смотрите в сторону быстрой сортировки, пирамидальной, далее в сторону сортировки подсчетом и т.д
wolf
2 / 2 / 1
Регистрация: 17.09.2012
Сообщений: 860
18.06.2013, 20:09  [ТС]     сортировка массива выбором #6
ну мне по сути сильно мудренный ненужен)))
Thinker
Эксперт C++
4221 / 2195 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
18.06.2013, 20:10     сортировка массива выбором #7
Цитата Сообщение от wolf Посмотреть сообщение
ну мне по сути сильно мудренный ненужен)))
возьмите оптимизированный пузырьковый алгоритм и то получше будет, алгоритм проще некуда.
wolf
2 / 2 / 1
Регистрация: 17.09.2012
Сообщений: 860
18.06.2013, 21:59  [ТС]     сортировка массива выбором #8
ща гляну, спасиб)

Добавлено через 1 час 47 минут
подскажите почему не работает когда вот это

C++
1
2
3
4
cout << "\n";
system("PAUSE");
return 0;
}
заменяю на это

C++
1
2
3
4
cout << "\n";
_getch();
return (0);
}
MrGluck
Модератор
Эксперт CЭксперт С++
6997 / 4168 / 594
Регистрация: 29.11.2010
Сообщений: 11,047
18.06.2013, 22:28     сортировка массива выбором #9
Цитата Сообщение от wolf Посмотреть сообщение
MrGluck хм где должны быть отступы? вроде так везде
ну например вот так ведь лучше будет
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
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <conio.h>
#include <clocale>
 
using namespace std;
 
void ChoicesSort(int*, int); // объявление функции сортировки
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int n; // Количество элементов массива
    cout << "Введите размер массива: ";
    cin >> n;
    cout << endl;
    cout << "Массив: " << endl;
    int *mas = new int [n];
    srand(time(NULL));
    for (int i = 0; i < n; i++)
    {
        mas[i] = rand() % 200 - 100; // заполняем массив случайными числами
        cout << mas[i] << " "; // выводим массив на экран
    }
    cout << "\n\n";
 
    ChoicesSort(mas, n); // вызываем функцию сортировки Выбором
    cout << "Отсортированный массив: " << endl;
    for (int i = 0; i < n; i++)
    {
        cout << mas[i] << " "; // Вывод на экран отсортированного массива
    }
    cout << "\n";
    getch();
    return 0;
}
 
void ChoicesSort(int* Perestanovka, int length) // сортировка Выбором
{
    for (int j = 0; j < length; j++)
    {
        int temp = Perestanovka[0]; // временная переменная, храненящая значения перестановки
        for (int z = j + 1; z < length; z++)
        {
            if (Perestanovka[j] > Perestanovka[z])
            {
                temp = Perestanovka[j];
                Perestanovka[j] = Perestanovka[z];
                Perestanovka[z] = temp;
            }
        }
    }
}
Далее, обратите внимание на то, что заголовочные файлы обрамлены угловыми скобками, а не кавычками. В кавычках записывают пользовательские файлы.
Также заметьте, что добавлен cstdlib. Именно в нем содержаться функции srand, rand, system. iomanip здесь не нужен, а в conio.h содержится объявление функции _getch(). Вместо устаревшего сишного time.h используется ctime. Для управления локалью требуется файл clocale, и не говорите мне, что работает без него, нет никаких гарантий, что он подцепится хедером iostream.

Сразу после расстановок код стало можно читать. И сразу становится видно, что память вы не освобождаете.
delete [] mas; перед выходом с main (перед return).
Цитата Сообщение от wolf Посмотреть сообщение
заглавных ведь букв тут нету)
а тут
Цитата Сообщение от wolf Посмотреть сообщение
void ChoicesSort(int*, int);
есть
функцию надо бы назвать сhoicesSort, хотя лучше sortChoises (дело вкуса)

И последнее: вот вам пузырек, с ним разбирайтесь
C++
1
2
3
4
5
6
7
8
9
10
11
void bubbleSort(int *arr, const size_t size)
{
    for (size_t i=0; i < size; i++)
        for (size_t j = size-1; j > i; j--)
            if (arr[j] < arr[j-1] )
            {
                int tmp = arr[j];
                arr[j] = arr[j-1];
                arr[j-1] = tmp;
            }
}
Thinker
Эксперт C++
4221 / 2195 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
18.06.2013, 22:37     сортировка массива выбором #10
я за пузырек с контролем упорядоченности:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void BubbleSort(int *a, const int n)
{
   int i, left = 0, flag, buf;
   do
   {
      flag = 0;
      for(i = n - 1; i > left; i--)
         if (a[i-1] > a[i])
         {
            buf = a[i]; a[i] = a[i-1]; a[i-1] = buf;
            flag = 1;
         }
      left++;
   }
   while(flag);
}
wolf
2 / 2 / 1
Регистрация: 17.09.2012
Сообщений: 860
18.06.2013, 23:48  [ТС]     сортировка массива выбором #11
спасибо огромное ребят за помощь))))

Добавлено через 55 секунд
я тож за пузырек ну я пишу курсовую работу по данному коду, а если менять код, то надо переписывать всю курсовую поэтому не вариант)
MrGluck
Модератор
Эксперт CЭксперт С++
6997 / 4168 / 594
Регистрация: 29.11.2010
Сообщений: 11,047
19.06.2013, 11:59     сортировка массива выбором #12
wolf, ишь какой нежный, мы курсовую раз по 7 переписывали. Достаточно было лишь одного слова случайно в Arial вместо Times New Roman или выравнивания по левому краю вместо ширины и давай гуляй.

Я бы за такой код послал на переработку. Причины (ошибки) описал выше. Более того, сортировка ваша - прямой прецедент на минус бал. Хотя если все на ней вертится, то минус два бала.

P.S. ну и кода у нас было несколько к, а у вас тут смешно даже озвучить.
Thinker
Эксперт C++
4221 / 2195 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
19.06.2013, 12:08     сортировка массива выбором #13
Цитата Сообщение от wolf Посмотреть сообщение
если менять код, то надо переписывать всю курсовую поэтому не вариант
если вы спрашивали
Цитата Сообщение от wolf Посмотреть сообщение
подскажите пожалуйста ещё, для чего записывается, временная переменная хранящая значения перестановки?
int temp = Perestanovka[0]; // временная переменная, храненящая значения перестановки
то сортировку скачали где-то и просто вставили в код программы, да еще и не разобрались с ней. разве это курсовая...
wolf
2 / 2 / 1
Регистрация: 17.09.2012
Сообщений: 860
19.06.2013, 23:29  [ТС]     сортировка массива выбором #14
Цитата Сообщение от Thinker Посмотреть сообщение
то сортировку скачали где-то и просто вставили в код программы, да еще и не разобрались с ней. разве это курсовая...
разобрался полностью с кодом и курсовую сдал)))
wolf
2 / 2 / 1
Регистрация: 17.09.2012
Сообщений: 860
21.06.2013, 20:29  [ТС]     сортировка массива выбором #15
да код взял из инета, потом разберался в нем, просто было не понятно про перестановку
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.06.2013, 20:35     сортировка массива выбором
Еще ссылки по теме:

Сортировка выбором - C++
Сортировка выбором. Дана последовательность чисел а1, а2,..., аn. Требуется переставить элементы так, чтобы они были расположены по...

Сортировка выбором - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; #include &lt;cstdlib&gt; using namespace std; void SetRussianLocale() {...

Сортировка выбором на с++ - C++
Сортировка выбором. Выбрать минимальный элемент в массиве, перенести в выходной массив на очередную позицию. Во входном массиве все...

Сортировка выбором - C++
Разбираю сортировку выбором. Как реализовать сортировку по возрастанию понял, а как реализовать сортировку по возрастанию до первого...

Сортировка выбором - C++
Добрый день, я заметил, что при сортировке массива из N элементов по алгоритму сортировки &quot;Выбором&quot;, количество смены местами элементов...


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

Или воспользуйтесь поиском по форуму:
Thinker
Эксперт C++
4221 / 2195 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
21.06.2013, 20:35     сортировка массива выбором #16
Цитата Сообщение от wolf Посмотреть сообщение
да код взял из инета
это абсолютно нормально, не все же изобретать велосипеды, главное, разбираться и двигаться вперед
Yandex
Объявления
21.06.2013, 20:35     сортировка массива выбором
Ответ Создать тему
Опции темы

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