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

0 голосов
34 просмотров

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


Информатика (195 баллов) | 34 просмотров
Дан 1 ответ
0 голосов

#include

#include


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";</p>

}

cout << endl;</p>

}

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

{

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;

}

(130 баллов)