Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2018, 12:11   #1
SadZhaba
 
Регистрация: 02.03.2018
Сообщений: 6
По умолчанию Дана последовательность чисел, расположить ее отрицательные элементы, стоящие на нечетных местах, по возрастанию.

Написал пузырьковую сортировку, но почему то она работает через раз, т.е. если n>5 то просто меняет местами рандомные элементы. Помогите разобраться пожалуйста


Код:
#include <iostream>
using namespace std;
int main()
{
	int n = 0;
	int* a = new int[100];
	int count = 0;
	int foo = 0, foo1 = 0;
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		a[i] = rand() % 100 - 80;
	}
	for (int i = 0; i < n; i++)
	{
		cout << a[i] << " ";
	}
	cout << endl;
	bool flag = 1;
	for (int i = 0; i < n; i++)
	{
		if (i % 2 != 0)
		{
			if (a[i] < 0)
			{
				flag = 0;
				for (int k = 1; k < n; k+=2)
				{
					for (int j = k + 2; j < n; j += 2)
					{
						if (a[i] < a[j-2])
						{
							swap(a[i], a[j-2]);
							j--;
						}
					}
				}
			}
		}
	}
	if (flag == 1)
		cout << " net takih chisel a[i]<0 and i%2!=0 " << endl;
	for (int i = 0; i < n; i++)
	{
		cout << a[i] << " ";
	}
	system("pause");
}
SadZhaba вне форума Ответить с цитированием
Старый 05.11.2018, 15:49   #2
2Lui
Пользователь
 
Аватар для 2Lui
 
Регистрация: 14.03.2017
Сообщений: 68
По умолчанию

Пройдитесь отладчиком по коду, пересмотрите циклы for хорошо.
int* a = new int[100]; вот это вообще не понимаю можно же просто int a[100];
2Lui вне форума Ответить с цитированием
Старый 05.11.2018, 18:11   #3
SadZhaba
 
Регистрация: 02.03.2018
Сообщений: 6
По умолчанию

Цитата:
Сообщение от 2Lui Посмотреть сообщение
Пройдитесь отладчиком по коду, пересмотрите циклы for хорошо.
int* a = new int[100]; вот это вообще не понимаю можно же просто int a[100];
Отладчиком проходился, все вроде бы нормально, а насчет указателя - это был динамический массив, но почему то стали вылетать исключения и пришлось на фиксированный поменять.
SadZhaba вне форума Ответить с цитированием
Старый 06.11.2018, 01:21   #4
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Вместо std::sort можешь что-то другое сам написать.
Код:
#include <iostream>
#include <algorithm>
using namespace std;

void my_sort(int* arr, size_t size)
{
    const size_t insize = size/2;
    if(!insize)
        return;
    int* tosort = new int[insize];
    size_t nums = 0;
    for(size_t i = 1; i<size; i+=2)
    {
        if(arr[i]<0)
        {
            tosort[nums] = arr[i];
            ++nums;
        }
    }
    if(nums>0)
    {
        std::sort(tosort, tosort + nums);
        for(int* origin = arr+1, *sorted = tosort; sorted!=tosort+nums; origin+=2)
        {
            if(*origin<0)
            {
                *origin = *sorted;
                ++sorted;
            }
        }
    }
    delete[] tosort;
}

int main()
{
	int n = 0;
	//int* a = new int[100]; //  Почему 100? Зачем ты вообще n считываешь тогда?
    
	int count = 0;
	int foo = 0, foo1 = 0;
	cin >> n;
    int* a = new int[n];
	for (int i = 0; i < n; i++)
	{
		a[i] = rand() % 100 - 80;
	}
	for (int i = 0; i < n; i++)
	{
		cout << a[i] << " ";
	}
	cout << endl;
    
    my_sort(a, n);
    
	for (int i = 0; i < n; i++)
	{
		cout << a[i] << " ";
	}
	system("pause");
}
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Старый 06.11.2018, 01:22   #5
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

SadZhaba, я рекомендую писать быструю сортировку, она понятнее пузырьковой.
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Старый 06.11.2018, 13:17   #6
SadZhaba
 
Регистрация: 02.03.2018
Сообщений: 6
По умолчанию

New man, Это был динамический массив для n элементов, но вылетали исключения, пришлось 100 задать. За решение спасибо, а что std::sort делает?
SadZhaba вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дана матрица nxm. Отсортировать по возрастанию элементы стоящие по периметру матрицы, начиная с элемента A(n,1) по часовой стрелке Pr* Паскаль, Turbo Pascal, PascalABC.NET 0 17.06.2015 11:55
Упорядочить по возрастанию отдельно элементы, стоящие на четных местах, и элементы, стоя-щие на нечетных местах, используя массив YaDenis Помощь студентам 3 11.01.2013 22:39
Дан массив x целых чисел. Упорядочить элементы, стоящие на четных местах по невозрастанию, а на нечетных – по неубыванию. NuclearMurder Помощь студентам 0 11.11.2012 17:43
Дана последовательность, расположить ее положительные элементы, стоящие на нечетных местах по возра daimonTM Общие вопросы C/C++ 1 09.03.2011 08:39
Дана последовательность x1,x2,...,x20. Требуется расположить отрицательные элементы последовательности в Irisk Помощь студентам 2 23.12.2010 16:39