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

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

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

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

18.06.2013, 20:00. Просмотров 627. Ответов 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]; // временная переменная, храненящая значения перестановки
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2013, 20:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос сортировка массива выбором (C++):

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

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

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

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

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

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

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

Отступов нет, дальше не смотрел. Но называть функции с заглавной буквы - моветон
0
Thinker
Эксперт С++
4228 / 2202 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
18.06.2013, 20:03 #3
алгоритм верный, а это
Цитата Сообщение от wolf Посмотреть сообщение
int temp = Perestanovka[0];
излишне
при этом сам алгоритм не из лучших, он не учитывает упорядоченность массива
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 секунд
как грамотней его написать?
0
Thinker
Эксперт С++
4228 / 2202 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
18.06.2013, 20:07 #5
Цитата Сообщение от wolf Посмотреть сообщение
как грамотней его написать?
скажем так. алгоритм, который вы привели, для детей детского сада. смотрите в сторону тех сортировок, которые учитывают упорядоченность (например, шейкерная, оптимизированная пузырьковая), далее смотрите в сторону быстрой сортировки, пирамидальной, далее в сторону сортировки подсчетом и т.д
1
wolf
2 / 2 / 1
Регистрация: 17.09.2012
Сообщений: 860
18.06.2013, 20:09  [ТС] #6
ну мне по сути сильно мудренный ненужен)))
0
Thinker
Эксперт С++
4228 / 2202 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
18.06.2013, 20:10 #7
Цитата Сообщение от wolf Посмотреть сообщение
ну мне по сути сильно мудренный ненужен)))
возьмите оптимизированный пузырьковый алгоритм и то получше будет, алгоритм проще некуда.
1
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);
}
0
MrGluck
Модератор
Эксперт CЭксперт С++
7427 / 4542 / 676
Регистрация: 29.11.2010
Сообщений: 12,328
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;
            }
}
2
Thinker
Эксперт С++
4228 / 2202 / 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);
}
1
wolf
2 / 2 / 1
Регистрация: 17.09.2012
Сообщений: 860
18.06.2013, 23:48  [ТС] #11
спасибо огромное ребят за помощь))))

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

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

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

Сортировка выбором - C++
Здравствуйте товарищи. Есть к вам одни вопрос. Есть задание- . Дана целочисленная квадратная матрица. Определить: • номер строки, в...

Сортировка выбором - C++
#include &quot;stdafx.h&quot; #include&quot;iostream&quot; #include&quot;time.h&quot; using namespace std; int main() {srand(time(0)); int a, n, k, q,j; ...

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

сортировка выбором - C++
помогите пожалуйста, алгоритм не работает то есть не сортирует #ifndef FUNC #define FUNC #include &quot;vibor.h&quot; #include &lt;vector&gt; ...


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

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

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