@-Lex
1

Отсортировать элементы массива по возрастанию с сохранением позиций нулей

13.09.2009, 22:52. Показов 3372. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Хелп!Не могу никак написать правильный код...вот условие:отсортировать элементы массива (отрицательные влево,положительные вправо,т.е. не изменяя порядка следования элементов) с сохранением позиций нулей,без использования дополнительных массивов
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.09.2009, 22:52
Ответы с готовыми решениями:

Элементы массива с нечетных позиций необходимо отсортировать по возрастанию, с четных - по убыванию
Значит есть одномерный массив из 10 чисел. Заполнен случайными значениями. Числа расположенные на...

Отсортировать положительные элементы массива по возрастанию, отрицательные элементы оставить на своих местах
Дан массив А,заполненный положительными и отрицательными целыми числами.необходимо отсортировать...

Отсортировать элементы массива по возрастанию
Здравствуйте,нужна программа на массиве одномерном. Задание: Задан массив из k чисел....

Отсортировать по возрастанию элементы массива
1)Дан массив целых чисел из 10 элементов отсортировать по возрастанию. 2)Дан действительный массив...

11
2816 / 1407 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
14.09.2009, 00:21 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
#include <iostream>
using namespace std;
 
int main()
{
    const int n = 8;
    int A[n] = {23, 0, -5, 0, 9, 12, 0, -1};
    
    for (int i=0; i<n-1; i++)
    {
        if (A[i]==0) continue;
        for (int j=i+1; j<n; j++)
        {
            if (A[j]==0) continue;
            if (A[i] > A[j])
            {
                int t=A[i];
                A[i] = A[j];
                A[j] = t;
            }
        }
    }
    
    for (int i=0; i<n; i++)
        cout << A[i] << "\t";
        
 
    return 0;
}
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
14.09.2009, 00:48 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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
 
short Left_Pos(int* mas, short n, short cur)
{
    short i;
    for(i = cur; i < n; ++i)
        if(mas[i] < 0)
            return i;
    return -1;
}
short Right_Pos(int* mas, short n, short cur)
{
    short i;
    for(i = cur; i < n; ++i)
        if(mas[i] > 0)
            return i;
    return -1;
}
int main()
{
    setlocale(LC_ALL, "Russian");
    short n(10), i;
    int mas[] = { 5, 0, 6, 8, 9, -1, -6, 4, -3, -8 };
    std::cout<<"Введите элементы массива:\n";
    for(i = 0; i < n; ++i)
        std::cout<<mas[i]<<' ';
    std::cout<<'\n';
    short pos_l(0), pos_r(0), ind_fp(0); 
 
    for(i = 0; i < n/2+1; ++i)
    {
        pos_l = Left_Pos(mas, n, pos_l);
        pos_r = Right_Pos(mas, n , pos_r);
        if(pos_l != -1 && pos_r != -1)
        {
            if(pos_l > pos_r)
                mas[pos_l] ^= mas[pos_r] ^= mas[pos_l] ^= mas[pos_r];
        }
        else
            break;
    }
    for(i = 0; i < n; ++i)
        std::cout<<mas[i]<<' ';
 
    std::cout<<'\n';
    system("pause");
    return 0;
}
, но дело в том, что надо сохранить порядок как нулей, так и отрицательных и положительных элементов
0
2816 / 1407 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
14.09.2009, 01:15 4
M128K145, значит я не так понял.
0
562 / 373 / 55
Регистрация: 05.04.2009
Сообщений: 767
14.09.2009, 03:34 5
@-Lex,
Цитата Сообщение от @-Lex Посмотреть сообщение
отсортировать элементы массива
сортировка
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 <iomanip>
using namespace std;
//======================================================== 
int main()
{
const unsigned short n = 11;
int A[n] = { 23, -5, 0, 333, 0, 9, 12, -17, 4, 0, -1 };
 
    for ( size_t i = 0; i < n; i++ ) 
    cout << setw(3)<< A[i] << " ";
    cout << endl;
    
    //---------------------------------------------------
    for ( size_t i = 0; i < n; i++ )
    {
    if ( A[i] == 0 )continue; 
    if ( A[i]  < 0 )
        for ( int j = i; j >= 0; j-- )
        {           
            if ( A[j] == 0 )continue; 
        if ( A[j]  > 0 )            
            {
                int t = A[i];
                 A[i] = A[j]; 
                 A[j] =    t;
         i = j; 
            }
        }
    }//---------------------------------------------------
    for ( size_t i = 0; i < n; i++ ) 
    cout << setw(3)<< A[i] << " "; cout << endl;
        
system ( "pause" ); 
return 0;
}//=======================================================
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
15.09.2009, 15:58 6
сохранить порядок как нулей
То есть если у нас есть 500 нулей, то мы не должны их перемешивать ?
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
15.09.2009, 16:01 7
odip, именно, mirso примерно правильно соорудил решение
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
15.09.2009, 16:05 8
Так правильно или примерное правильно ?
Встроенный тест считает правильно.
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
15.09.2009, 16:19 9
На C++ (это же ++, не правда ли? ) все еще проще:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <algorithm>
using namespace std;
 
int main()
{
    const int n = 8;
    int A[n] = {23, 0, -5, 0, 9, 12, 0, -1};
 
    stable_sort(A, A + n);
 
    for (int i=0; i<n; i++)
        cout << A[i] << "\t";
 
     return 0;
}
0
562 / 373 / 55
Регистрация: 05.04.2009
Сообщений: 767
16.09.2009, 00:27 10
CheshireCat,
Цитата Сообщение от CheshireCat Посмотреть сообщение
это же ++, не правда ли?
Цитата Сообщение от @-Lex Посмотреть сообщение
с сохранением позиций нулей
у тебя вывод такой
23 0 -5 0 9 12 0 -1//до
-5 -1 0 0 0 9 12 23//после
а нужен такой
23 0 -5 0 9 12 0 -1//до
-5 0 -1 0 23 9 0 12//после
0
3 / 3 / 0
Регистрация: 18.08.2009
Сообщений: 40
16.09.2009, 15:25 11
Народ а так?Громоздко.Но кажется правильно.
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
#include <stdio.h>
#include "stdafx.h"
 
#include <cstdio>
#include <iostream>
using namespace std;
    int main()
{
    int a[15]={0,-1,0,1,-9,0,-5,23,-4,0,-7,-2,13,2,0};
    
    int i,k,c,b,q=15;
 
    for(i=0;i<q;i++)
    {
        if(a[i]==0)continue;
        if(a[i]<0)
        {
            for(k=0;k<i;k++)
            {
                if(a[k]<0 ||a[k]==0)continue;
                if(a[k]>0)
                {
                    c=a[i];
                    for(;k<i+1;k++)
                    {
                        if(a[k]!=0)
                        {
                            b=a[k];
                            a[k]=c;
                            c=b;
                        }
                    }
                }
            }
        }
    }
    for(i=0;i<q;i++)
        {
            cout<<a[i]<<" ";
        }
        
        
 
 
system("pause");
return 0;
 }
Добавлено через 3 минуты
Хотя пожалуй Mirso cделал лучше.
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
16.09.2009, 15:27 12
Хм, ну, значит, я не понял/невнимательно прочитал условие задачи.../косноязычно составлено... и т.п. Тогда приведенный мною код не годится.
0
16.09.2009, 15:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.09.2009, 15:27
Помогаю со студенческими работами здесь

Отсортировать элементы массива X по возрастанию
Отсортировать элементы массива X по возрастанию.

Отсортировать по возрастанию элементы массива
Отсортировать по возрастанию элементы массива удовлетворяющие условию ai&gt;10 методом обмена.

Отсортировать элементы массива по возрастанию
Задан массив из k чисел. Отсортировать элементы массива по возрастанию.

Отсортировать элементы массива по не возрастанию
Дан массив целых чисел из n элементов, заполненный случайным образом числами из промежутка ....

Отсортировать по возрастанию элементы массива
Условие: Отсортировать по возрастанию элементы массива, удовлетворяющие условию ai&gt;-10 методом...

Отсортировать элементы массива по возрастанию.
Добрый день уважаемые форумчане, столкнулся с задачками на массивы, помогите пожалуйста решить их....


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru