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

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

Войти
Регистрация
Восстановить пароль
 
I love myguitar
4 / 4 / 1
Регистрация: 23.10.2012
Сообщений: 233
#1

сортировать массив от одного найденного элемента до другого найденного элемента - C++

04.10.2013, 00:38. Просмотров 529. Ответов 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
template <typename T>
void searchElem(T a[], int size){
    T min=0,min2=0,temp;
    for(int i=0; i<size;i++){
        if(a[i]<0 && min==0)
            min=a[i];
    for(int j=size-1;j>0;j--)
        if(a[j]<0 && min2==0){
            min2=a[j];
        }   // Мой неправильный вариант сорт от мин числа до мин числа
        if(a[min2-1]>a[min]){
            temp=a[ min-1];
            a[min-1]=a[min];
            a[min]=temp;
        }
    }
 
 void main(){
    srand(time(NULL));
    const int size=10;
     int ar[size];
    for(int i=0; i<size;i++){
        ar[i]=rand()%40-20;
        cout<<ar[i]<<"\t";
    }
    cout<<endl;
    searchElem(ar,size);
        for(int i=0; i<size;i++)
        cout<<ar[i]<<"\t";
    }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2013, 00:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос сортировать массив от одного найденного элемента до другого найденного элемента (C++):

Как правильно словить исключение не найденного элемента - C++
Доброго вечера! Не могу вьехать, как правильно словить исключение не найденного элемента: string ToDelete = View.DeleteProduct();...

Записать два элемента одного массива, как один элемент другого - C++
Здравствуйте) есть такое задание: нужно составить таблицу истинности(дискретная математика). И в процессе выполнения нужно записать...

Реализовать приложение, содержащее функции добавления нового элемента в массив и удаления элемента из массива. (Имитируется “резиновый” массив) - C++
Реализовать приложение, содержащее функции добавления нового элемента в массив и удаления элемента из массива. (Имитируется “резиновый”...

Списки, удаление элементов до найденного максимального значения - C++
Речь идёт о списках, с реализацией без STL. Суть проблемы заключается в том, что не могу удалить элементы до максимального(расположены...

Массив: Количество строк, не содержащих ни одного нулевого элемента - C++
Всем привет!) У меня такая задача. Дана целочисленная прямоугольная матрица. Определить: 1) Количество строк, не содержащих ни одного...

Написать функцию F(S,pos), которая возвращает номер первого найденного пробела - C++
Написать и протестировать функцию F(S,pos), которая анализирует строку S, начиная с позиции pos, и возвращает номер первого найденного...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
HedgehogLu
147 / 68 / 1
Регистрация: 04.09.2013
Сообщений: 260
04.10.2013, 00:56 #2
ну для начала поиск обоих минимумов надо засунуть в один цикл. Потом отсортировав индексы минимумов в другом цикле осуществлять сортировку. Это если в лоб

Добавлено через 2 минуты
Более того. Сначала у вас с минимумы заносится значения элементов, а потом вы вдруг минимумы используете как индексы элементов а не значение элементов.
0
I love myguitar
4 / 4 / 1
Регистрация: 23.10.2012
Сообщений: 233
04.10.2013, 01:09  [ТС] #3
не получиться в одном цикле мне надо искать мин числа с левой стороны и с правой
0
HedgehogLu
147 / 68 / 1
Регистрация: 04.09.2013
Сообщений: 260
04.10.2013, 01:42 #4
ну почему же не получится.
C++
1
2
3
4
5
6
7
8
9
10
...
for(int i=0; i<size;i++)
{
  if(a[i]<0)
  { 
    min2=a[i];
    if(!min) min=a[i]
  } 
}
...
Тока это код для нахождения самих минимумов а не индексов элементов содержащих эти минимумы
1
I love myguitar
4 / 4 / 1
Регистрация: 23.10.2012
Сообщений: 233
04.10.2013, 01:59  [ТС] #5
Да уж
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,927
04.10.2013, 02:53 #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
#include <iostream>
#include <array>
#include <algorithm>
#include <iterator>
#include <random>
#include <cstddef>
 
bool isNegative(const int x)
{
    return x < 0;
}
 
int main()
{
    const std::size_t N = 50;
    std::array<int, N> a;
    std::mt19937 gen {std::random_device()() };
    std::uniform_int_distribution<int> uid(-99, 99);
    std::generate(a.begin(), a.end(), [&uid, &gen]() -> int { return uid(gen); } );
    auto print_a = [](const std::array<int, N> &p)
    {
        std::copy(p.cbegin(), p.cend(), std::ostream_iterator<int>(std::cout, " ") );
        std::cout << std::endl;
    };
 
    std::cout << "Before: ";
    print_a(a);
 
    auto it1 = std::find_if(a.begin(), a.end(), isNegative),
         it2 (std::find_if(a.rbegin(), a.rend(), isNegative).base());
    if (it1 != a.end() && ++it1 != a.end() && it1 != it2)
        std::sort(it1, --it2);
 
    std::cout << "After:  ";
    print_a(a);
}
1
I love myguitar
4 / 4 / 1
Регистрация: 23.10.2012
Сообщений: 233
04.10.2013, 20:52  [ТС] #7
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
    template <typename T>
void searchElem_Sort(T a[], int size){
    T Rightmin=0,Leftmin=0,temp,rightInd,leftInd;
    for(int i=0; i<size;i++){
        if(a[i]<0){               // поиск самого правого минимального
            Rightmin=a[i];  // индекс  самого правого минимального
            rightInd=i;
        if(!Leftmin){           // поиск самого левого минимального
            Leftmin=a[i];
            leftInd=i;       // индекс самого левого минимального
        }
        }
    }
    cout<<Leftmin<<" "<<leftInd<<"\t"<<Rightmin<<" "<<rightInd<<endl;
    cout<<endl;
        for(int i=leftInd; i<rightInd;i++){  // сортировка всех чисел по возраст от лев мин до прав мин
            for(int j=rightInd;j>i;j--)
        if(a[j-1]>a[j]){
            temp=a[j-1];
            a[j-1]=a[j];
            a[j]=temp;
        }
}
}
void main(){
    srand(time(NULL));
    const int size=10;
     int ar[size];
     int ar2[size];
    for(int i=0; i<size;i++){
        ar[i]=rand()%40-20;
        cout<<ar[i]<<"\t";
    }
    cout<<endl;
    searchElem_Sort(ar,size);
        for(int i=0; i<size;i++)
        cout<<ar[i]<<"\t";
    }
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.10.2013, 20:52
Привет! Вот еще темы с ответами:

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

Многомерный массив. Дублирование значения первого элемента строки в значении последнего элемента предыдущей - C++
Здравствуйте уважаемые форумчане! Решил я сегодня разобраться с многомерными массивами! И немного разочаровался в своих результатах....

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

Найти среднее арифметическое элементов массива, и обнулить все элементы, меньшие найденного значения - C++
Программа должна осуществлять ввод массива из 80 вещественных элементов (либо по выбору пользователя задать их через функцию rand()...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
04.10.2013, 20:52
Ответ Создать тему
Опции темы

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