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

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

Восстановить пароль Регистрация
 
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 143
13.10.2011, 19:33     Cортировка массива. #1
Доброго вечера. представлен массив ,не четные элементы данного массива нужно поместить в другой массив( на самом деле нужно рассортировать массив так след. образом : четные элементы вначало . нечетные элементы вконец)
. т.е. элементы из массива a[i] сортируются в массив b[ib].
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
 
#include <iostream>
#include <cstdlib>
#include <time.h>
 
using namespace std;
int main () {
    int n,ib,key ;
    cin >> n;
    int * a, * b;
    srand(time(NULL));
    a = new int [n];
    for (int i=0; i<n;i++){
    cout<<(a[i] = rand()%100)<<" ";
    }
    for (int i = 0 ,ib=0;i<n;i++){
        switch (key){
            case (a[i]==0)     :b[ib] = a[i], ib= ib+1;break;
            case (a[i]%2 != 0) :b[ib]=a[i] ,ib = ib+1;break;
        } 
        cout << endl << " " << b[ib];
        
    }
  
        return 0;
}
вот мой примерный набросок ,он не рабочий и требует пересмотра. попрошу пояснить как доработать.

Добавлено через 1 минуту
к тому же переменная int key . я поместил ее после switch т.к. без нее подчеркивается красным. что нужно прописывать после switch в скобках?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2011, 19:33     Cортировка массива.
Посмотрите здесь:

C++ Cортировка цифр
Cортировка массива. C++
Cортировка символьного двумерного массива по алфавиту C++
Cортировка в файле C++
C++ Cортировка матриц
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
13.10.2011, 19:39     Cортировка массива. #2
Замени switch на два if'a. Со switch'ем такой код не заработает.
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 143
13.10.2011, 19:52  [ТС]     Cортировка массива. #3
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
 
#include <iostream>
#include <cstdlib>
#include <time.h>
 
using namespace std;
int main () {
    int n,ib ;
    cin >> n;
    int * a, * b;
    srand(time(NULL));
    a = new int [n];
    for (int i=0; i<n;i++){
    cout<<(a[i] = rand()%100)<<" ";
    }
    for (int i = 0 ,ib=0;i<n;i++){
       if (a[i]==0) b[ib] = a[i];
       if (a[i]%2 != 0) b[ib]=a[i] , ib= ib+1 ;
       if (a[i]%2 == 0) b[ib]=a[i] , ib= ib+1 ;
        cout << endl << " " << b[ib];
    }
  
        return 0;
}
Но тут возникает вопрос относительно элементра : 0 , если дописать break после первого if. завершится цикл.
если же не прописывать break , элемент 0 пройдет по всем трем if/
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
13.10.2011, 19:54     Cортировка массива. #4
Цитата Сообщение от scofielcl Посмотреть сообщение
if (a[i]%2 != 0) b[ib]=a[i] , ib= ib+1 ;
C++
1
if (a[i]%2 != 0) { b[ib]=a[i]; ib= ib+1 ; }
Добавлено через 52 секунды
Цитата Сообщение от scofielcl Посмотреть сообщение
если же не прописывать break
if(...){} else if(...){} else if(...){}
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 143
13.10.2011, 20:02  [ТС]     Cортировка массива. #5
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
 
#include <iostream>
#include <cstdlib>
#include <time.h>
 
using namespace std;
int main () {
    int n,ib ;
    cin >> n;
    int  * a, * b;
    srand(time(NULL));
    a = new int [n];
    for (int i=0; i<n;i++){
    cout<<(a[i] = rand()%100)<<" ";
    }
    for (int i = 0 ,ib=0;i<n;i++){
    if (a[i]%2 == 0) {b[ib]=a[i] , ib= ib+1 ;}
    else if (a[i]%2 != 0) { b[ib]=a[i]; ib= ib+1 ; }
    else if (a[i]%2 != 0) { b[ib]=a[i] , ib= ib+1;}
        cout << endl << " " << b[ib];
    }
  
        return 0;
}
Программа выполняется ,но результата нет.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
13.10.2011, 20:04     Cортировка массива. #6
Еще бы, вы выводите несуществующие элементы плюс к тому память под массив b кто выделять будет?
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 143
13.10.2011, 20:29  [ТС]     Cортировка массива. #7
b = new int [ib];
результат. элементы массива а , не записываются в массив б.

Добавлено через 5 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
#include <iostream>
#include <cstdlib>
#include <time.h>
 
using namespace std;
int main () {
    int n,ib ;
    cin >> n;
    int  * a, * b;
    srand(time(NULL));
    a = new int [n];
    b = new int [ib];
    for (int i=0,ib=0; i<n;i++){
    cout<<(a[i] = rand()%100)<<" ";
    if (a[i] == 0) {b[ib]=a[i] , ib= ib+1 ;}
    else if (a[i]%2 != 0) { b[ib]=a[i]; ib= ib+1 ; }
    else if (a[i]%2 != 0) { b[ib]=a[i] , ib= ib+1;}
    }
  
        return 0;
}
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
13.10.2011, 20:29     Cортировка массива. #8
Цитата Сообщение от scofielcl Посмотреть сообщение
b = new int [ib];
результат. элементы массива а , не записываются в массив б.
Я же вам написал, что вы выводите несуществующие элементы
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 143
13.10.2011, 21:02  [ТС]     Cортировка массива. #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
#include <iostream>
#include <cstdlib>
#include <time.h>
 
using namespace std;
int main () {
    int n,m,ib ;
    cin >> n;
    m = n;
    int  * a, * b;
    srand(time(NULL));
    a = new int [n];
    b = new int [m];
    for (int i=0,ib=0; i<n;i++){
    cout<<(a[i] = rand()%100)<<" ";
    if (a[i] == 0) {b[ib]=a[i] , ib= ib+1 ;}
    else if (a[i]%2 != 0) { b[ib]=a[i]; ib= ib+1 ; }
    else if (a[i]%2 != 0) { b[ib]=a[i] , ib= ib+1;}
    cout << " | " << b[ib]<<" | ";
    }
        return 0;
}
исправил несколько недоработок. но результат то же , как он выводит не сущ-их элементы ,им же присваиваются значения из массива а.

Добавлено через 13 минут
Для простоты .
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
#include <iostream>
#include <cstdlib>
#include <time.h>
 
using namespace std;
int main () {
    int n,m,ib ;
    cin >> n;
    m = n;
    int  * a ;
    srand(time(NULL));
    a = new int [n];
    int * b = new int [m];
    for (int i=0,ib=0; i<n;i++){
    cout<<(a[i] = rand()%100)<<" ";
    b[ib] = a[i];
    ib = ib+1;
    cout << " | " << b[ib]<<" | ";
    }
        return 0;
}
scofielcl
4 / 4 / 0
Регистрация: 11.09.2011
Сообщений: 143
13.10.2011, 21:26  [ТС]     Cортировка массива. #10
пойму в чем ошибка , отпишусь.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2011, 21:32     Cортировка массива.
Еще ссылки по теме:

C++ Cортировка динамической матрицы
Cортировка массива C++
C++ Cортировка записей в массиве

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

Или воспользуйтесь поиском по форуму:
@r!er
 Аватар для @r!er
2 / 2 / 1
Регистрация: 15.09.2011
Сообщений: 25
13.10.2011, 21:32     Cортировка массива. #11
Такой вариант, но используется только один массив:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void sort(int* m, const int n)
{
 int i, j, temp, s=0;
 for(i=1; i<n; i++)
 {
  j=i;
  while(j>0 && !(m[j-1]%2) && m[j]%2)
  {
   temp=m[j-1];
   m[j-1]=m[j];
   m[j]=temp;
   j--;
   s++;
  }
 }
 cout<<"Êîëè÷åñòâî ГЁГІГҐГ°Г*öèé ñîðòèðîâêè: "<<s<<endl<<endl;
}
Yandex
Объявления
13.10.2011, 21:32     Cортировка массива.
Ответ Создать тему
Опции темы

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