#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)
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++)
array[i] = (*positive_numbers++);
array[i] = (*negative_numbers++);
print_array(array,array_size); //Вывести отсортированный массив
/*Освобождаем память*/
delete[] pos_start;
delete[] neg_start;
delete[] array;
Copyright © 2024 SCHOLAR.TIPS - All rights reserved.
Answers & Comments
#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;
}