profile
Опубликовано 6 лет назад по предмету Информатика от maximus312454

Задание: дан массив из 15 рандомных чисел от -10 до 10. Нужно числа отсортировать так: сначала отрицательные на уменьшение, потом положительные на уменьшение.
Написать на с++, желательно через циклы !

  1. Ответ
    Ответ дан CSharper

    #include <iostream>

    #include <ctime>


    using namespace std;


    void fill_array(int* array, int size, int min,int max)

    {

    srand(time(NULL));

    for(int i = 0;i < size;i++)

    {

    array[i] = rand() % (max * 2 + 1) + min;

    }

    }

    void print_array(int* array, int size)

    {

    for(int i = 0;i < size;i++)

    {

    cout << array[i] << "t";

    }

    cout << endl;

    }

    int get_count_of(bool (*predicate)(int),int *array, int size)

    {

    int count = 0;

    for(int i = 0;i < size; i++)

    {

    if(predicate(array[i]))

    {

    count++;

    }

    }

    return count;

    }

    void sort_array(int* array, int size)

    {

    for(int i = 0; i < size; i++)

    {

    for(int j = 0;j<size - 1;j++)

    {

    if(array[j] < array[j + 1])

    {

    swap(array[j],array[j + 1]);

    }

    }

    }

    }


    int main(int argc, char** argv) {

    int array_size = 15;

    int* array = new int[array_size];//Создать массив

    fill_array(array,array_size,-10,10);//Заполнить его случайными значениями

    print_array(array,array_size);//Вывести массив на экран

    sort_array(array,array_size);//Отсортировать его

    int negative_numbers_count = get_count_of([](int number){ return number < 0; }, array,array_size); //Количество отрицательных элементов

    int positive_numbers_count = array_size - negative_numbers_count;//Количество положительных элементов

    int *positive_numbers = new int[positive_numbers_count];//Массив положительных элементов

    int *negative_numbers = new int[negative_numbers_count];//Массив отрицательных элементов

    int *pos_start = positive_numbers;//Указатель на начало массива положительных элементов

    int *neg_start = negative_numbers;//Указатель на начало массива отрицательных элементов

    for(int i = 0; i < array_size; i++)//Заполнение массивов

    {

    if(i < positive_numbers_count)

    {

    (*positive_numbers++) = array[i];

    }

    else

    {

    (*negative_numbers++) = array[i];

    }

    }

    positive_numbers = pos_start;//Возвращаем указатель на место

    negative_numbers = neg_start;//Возвращаем указатель на место

    /*Здесь выполняется ваше требование.

    * Сначала идут положительные числа в порядке убывания.

    * Потом идут отрицательные числа в порядке убывания.*/

    for(int i = 0; i < array_size; i++)

    {

    if(i < positive_numbers_count)

    {

    array[i] = (*positive_numbers++);

    }

    else

    {

    array[i] = (*negative_numbers++);

    }

    }

    print_array(array,array_size); //Вывести отсортированный массив

    /*Освобождаем память*/

    delete[] pos_start;

    delete[] neg_start;

    delete[] array;

    }

Самые новые вопросы