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

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

Восстановить пароль Регистрация
 
I love myguitar
4 / 4 / 1
Регистрация: 23.10.2012
Сообщений: 233
04.10.2013, 00:38     сортировать массив от одного найденного элемента до другого найденного элемента #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
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";
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2013, 00:38     сортировать массив от одного найденного элемента до другого найденного элемента
Посмотрите здесь:

Массив: Количество строк, не содержащих ни одного нулевого элемента C++
C++ Написать функцию F(S,pos), которая возвращает номер первого найденного пробела
C++ Реализовать приложение, содержащее функции добавления нового элемента в массив и удаления элемента из массива. (Имитируется “резиновый” массив)
После каждого четного элемента массива вставить 2 элемента с тем же значением, полученный массив отсортировать C++
C++ Как правильно словить исключение не найденного элемента
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HedgehogLu
 Аватар для HedgehogLu
146 / 67 / 1
Регистрация: 04.09.2013
Сообщений: 250
04.10.2013, 00:56     сортировать массив от одного найденного элемента до другого найденного элемента #2
ну для начала поиск обоих минимумов надо засунуть в один цикл. Потом отсортировав индексы минимумов в другом цикле осуществлять сортировку. Это если в лоб

Добавлено через 2 минуты
Более того. Сначала у вас с минимумы заносится значения элементов, а потом вы вдруг минимумы используете как индексы элементов а не значение элементов.
I love myguitar
4 / 4 / 1
Регистрация: 23.10.2012
Сообщений: 233
04.10.2013, 01:09  [ТС]     сортировать массив от одного найденного элемента до другого найденного элемента #3
не получиться в одном цикле мне надо искать мин числа с левой стороны и с правой
HedgehogLu
 Аватар для HedgehogLu
146 / 67 / 1
Регистрация: 04.09.2013
Сообщений: 250
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]
  } 
}
...
Тока это код для нахождения самих минимумов а не индексов элементов содержащих эти минимумы
I love myguitar
4 / 4 / 1
Регистрация: 23.10.2012
Сообщений: 233
04.10.2013, 01:59  [ТС]     сортировать массив от одного найденного элемента до другого найденного элемента #5
Да уж
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4924 / 2667 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
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);
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.10.2013, 20:52     сортировать массив от одного найденного элемента до другого найденного элемента
Еще ссылки по теме:

C++ Записать два элемента одного массива, как один элемент другого
Сделать добавление элемента в массив и удаление элемента из массива используя STL C++
C++ Списки, удаление элементов до найденного максимального значения

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

Или воспользуйтесь поиском по форуму:
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";
    }
Yandex
Объявления
04.10.2013, 20:52     сортировать массив от одного найденного элемента до другого найденного элемента
Ответ Создать тему
Опции темы

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