Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/41: Рейтинг темы: голосов - 41, средняя оценка - 4.59
 Аватар для krigan
1 / 1 / 3
Регистрация: 31.10.2012
Сообщений: 93

Сортировка выбором

25.09.2014, 12:57. Показов 7983. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Разбираю сортировку выбором. Как реализовать сортировку по возрастанию понял, а как реализовать сортировку по возрастанию до первого отрицательного элемента, а после первого отрицательного сортировать массив по убыванию при этом оставить первый отрицательный элемент на своём месте, не догоняю.

Обращаюсь с просьбой к Гуру программирования помочь с реализацией.

Вот условие задания:

1.Ввести массив случайных чисел. Найти первое отрицательное число в массиве, до него сортировка должна идти
по возрастанию, а после него по убыванию. А найденное число находится на своем месте. Использовать сортировку выбором.

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
41
42
43
44
45
46
47
48
49
50
51
52
53
#include<iostream>
#include <stdlib.h>
#include <time.h>
 
using namespace std;
 
void choicesSort(int* arrayPtr, int length_array) // сортировка выбором
{
    for (int repeat_counter = 0; repeat_counter < length_array; repeat_counter++)
    {
        int temp = arrayPtr[0]; // временная переменная для хранения значения перестановки
        for (int element_counter = repeat_counter + 1; element_counter < length_array; element_counter++)
        {
            if (arrayPtr[repeat_counter] > arrayPtr[element_counter] )
            {
                temp = arrayPtr[repeat_counter];
                arrayPtr[repeat_counter] = arrayPtr[element_counter];
                arrayPtr[element_counter] = temp;
            }
        }
    }
}
 
void main()
 
{
 
    setlocale(LC_CTYPE,"rus");
    srand(time(NULL));
 
    const long SIZE=10;
    int ar[SIZE];
 
    //до сортировки
    for (int i = 0; i < SIZE; i++)
    {
      ar[i]=-30+rand()%100;
      cout<<ar[i]<<"   ";
    }
    
    cout<<"\n\n";
    choicesSort(ar,SIZE);
 
    //после сортировки
    for (int i = 0; i < SIZE; i++)
    {
        cout<<ar[i]<<"   ";
    }
 
    cout<<"\n\n";
 
 
}
1
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.09.2014, 12:57
Ответы с готовыми решениями:

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

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

Сортировка выбором
Информатика 1 курс, прошу помочь с написанием кода программы: Сортировка выбором. Выбирается максимальный элемент из оставшихся и...

11
2393 / 1922 / 763
Регистрация: 27.07.2012
Сообщений: 5,562
25.09.2014, 13:03
Цитата Сообщение от krigan Посмотреть сообщение
как реализовать сортировку по возрастанию до первого отрицательного элемента, а после первого отрицательного сортировать массив по убыванию при этом оставить первый отрицательный элемент на своём месте
1) Найти этот первый отрицательный элемент. Запомнить его индекс.
2) Представить, что массив теперь - это два массива. Один начинается с начала и имеет размер == индексу первого отрицательного элемента. Второй - начинается со следующего элемента за первым отрицательным и заканчивается там, где заканчивался исходный массив.
3) Отсортировать оба новых массива, каждый как требуется.
0
 Аватар для MakItSim
19 / 19 / 14
Регистрация: 23.09.2014
Сообщений: 117
25.09.2014, 13:04
Цитата Сообщение от krigan Посмотреть сообщение
Разбираю сортировку выбором. Как реализовать сортировку по возрастанию понял, а как реализовать сортировку по возрастанию до первого отрицательного элемента, а после первого отрицательного сортировать массив по убыванию при этом оставить первый отрицательный элемент на своём месте, не догоняю.
А в чем разница в сортировке по-твоему кроме того, что ты сортируешь, например, не 10 элементов из массива, а 7?
В задаче написано, например:
Цитата Сообщение от krigan Посмотреть сообщение
Найти первое отрицательное число в массиве
Где ты это делаешь?
У тебя функция принимает length_array. По логике, сейчас если ты в length_array передашь любую длину - у тебя отсортируется часть массива этой длины. Сделай этой, найдя позицию отрицательного элемента.
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
25.09.2014, 13:04
Лучший ответ Сообщение было отмечено krigan как решение

Решение

Поступаете просто:

C++
1
2
int repeat_counter;
for (repeat_counter = 0; repeat_counter < length_array && arrayPtr[repeat_counter]>=0 ; repeat_counter++)
После выхода из цикла repeat_counter будет номером первого отрицательного элемента
Далее делаете подобный же цикл , но начиная с repeat_counter+1:
C++
1
for (repeat_counter++; repeat_counter < length_array ; repeat_counter++)
1
25.09.2014, 13:07

Не по теме:

Цитата Сообщение от krigan Посмотреть сообщение
Обращаюсь с просьбой к Гуру
А что, негуру тебе помочь не могут?

0
 Аватар для krigan
1 / 1 / 3
Регистрация: 31.10.2012
Сообщений: 93
25.09.2014, 13:18  [ТС]
А как оставить первый отрицательный элемент на своём месте?
0
 Аватар для MakItSim
19 / 19 / 14
Регистрация: 23.09.2014
Сообщений: 117
25.09.2014, 13:21
Цитата Сообщение от krigan Посмотреть сообщение
А как оставить первый отрицательный элемент на своём месте?
Никак, не трогать его просто сортировать до позиции на один элемент до него. А вторую часть начинать со следующего за ним.
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
25.09.2014, 13:28
Цитата Сообщение от krigan Посмотреть сообщение
А как оставить первый отрицательный элемент на своём месте?
Цитата Сообщение от zss Посмотреть сообщение
Далее делаете подобный же цикл , но начиная с repeat_counter+1:
repeat_counter+1 (+1 именно для этого).
1
 Аватар для krigan
1 / 1 / 3
Регистрация: 31.10.2012
Сообщений: 93
25.09.2014, 14:03  [ТС]
Отлично сортирует, но не так, как нужно. Знак для сортировки по убыванию тоже ведь нужно поменять?

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
void choicesSort(int* arrayPtr, int length_array) // сортировка выбором
{
    int repeat_counter;
    for (repeat_counter = 0; repeat_counter < length_array && arrayPtr[repeat_counter]>=0 ; repeat_counter++)
 
    {
        int temp = arrayPtr[0]; // временная переменная для хранения значения перестановки
        for (int element_counter = repeat_counter+1; element_counter < length_array; element_counter++)
        {
            if (arrayPtr[repeat_counter] > arrayPtr[element_counter] )
            {
                temp = arrayPtr[repeat_counter];
                arrayPtr[repeat_counter] = arrayPtr[element_counter];
                arrayPtr[element_counter] = temp;
            }
        }
 
    }
 
    for (repeat_counter++; repeat_counter < length_array ; repeat_counter++)
 
    {
        int temp = arrayPtr[0]; // временная переменная для хранения значения перестановки
        for (int element_counter = repeat_counter+1; element_counter < length_array; element_counter++)
        {
            if (arrayPtr[repeat_counter] > arrayPtr[element_counter] )
            {
                temp = arrayPtr[repeat_counter];
                arrayPtr[repeat_counter] = arrayPtr[element_counter];
                arrayPtr[element_counter] = temp;
            }
        }
 
    }
 
}
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
25.09.2014, 14:08
В 26 строке Больше поменяйте на Меньше
1
 Аватар для krigan
1 / 1 / 3
Регистрация: 31.10.2012
Сообщений: 93
25.09.2014, 14:15  [ТС]
Не всегда почему-то найденное число остаётся на своём месте, но в большинстве случаев работает правильно. Спасибо.
0
0 / 0 / 0
Регистрация: 24.02.2015
Сообщений: 1
24.02.2015, 18:18
2.Выполнить предыдущую задачу используя "пузырьковую" сортировку

Помогите сделать..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.02.2015, 18:18
Помогаю со студенческими работами здесь

Сортировка выбором
Сортировка выбором. Выбирается минимальный элемент в массиве и переносится в новый массив. Затем на его место записывается последний...

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

Сортировка выбором
Помогите тут сделать сортировку выбором for (i = 0; i&lt;n; i++) { for (j = 0; j&lt;n; j++) { if (arr&gt;arr) { ...

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

Сортировка выбором
#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; ...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru