Преобразовать массив так, чтобы сначала располагались все элементы равные максимальному, затем все остальные - C (СИ)
Формулировка задачи:
Помогите сделать задачу.
Преобразовать Массив таким образом, чтобы сначала располагались все элементы равные максимальному, затем все остальные.
не знаю где ошибка
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{ int a[10],i,j,k=0,b[10],max,n;
printf ("-->");
scanf ("%d",&n);
srand(time(0));
for (i=0;i<n;i++)
{
a[i]=rand()%10;
printf("%2d",a[i]);
}
max=a[0];
for (i=0;i<n;i++)
{
if (a[i]>max)
max=a[i];
}
printf("\n%d=max",max);
for(j=0;j<n;j++)
{
b[j]=rand()%10;
printf("%3d",b[j]);
}
k=n-1;
if (a[i]==max)
{
b[j]=max;
j++;
}
else
{
b[k]=a[i];
k--;
}
for (j=0;j<n;j++)
printf ("\n%d",b[i]);
return 0;
}Решение задачи: «Преобразовать массив так, чтобы сначала располагались все элементы равные максимальному, затем все остальные»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
double max_element(double* array, unsigned int size)
{
unsigned int i = 0;
double return_value = *array;
for (i = 1; i < size; ++i)
if (array[i] > return_value)
return_value = array[i];
return return_value;
}
void swap(double* a, double* b)
{
double t = *a;
*a = *b;
*b = t;
}
void sort(double* array, unsigned int size)
{
double max_elem = max_element(array, size);
unsigned int i, iterations = 0, end;
int next = 1;
while (next > 0)
{
next = -1;
for (i = 0, end = size - 1 - iterations; i < end; ++i)
if (array[i + 1] == max_elem)
{
swap(array + i + 1, array + i);
next = 1;
}
++iterations;
}
}
int main()
{
unsigned int size, i;
double* array = NULL;
printf("Enter the array size\n");
scanf("%u", &size);
array = (double*)malloc(sizeof(double) * size);
printf("Enter the array\n");
for (i = 0; i < size; ++i)
scanf("%lf", array + i);
sort(array, size);
printf("Result\n");
for (i = 0; i < size; ++i)
printf("%lf ", array[i]);
free(array);
return EXIT_SUCCESS;
}
Объяснение кода листинга программы
- В функции
max_elementищется максимальный элемент в массиве. - В функции
swapпроисходит обмен значениями двух переменных. - В функции
sortпроисходит сортировка массива по принципу, что все элементы равные максимальному располагаются в начале массива. - В функции
mainпользователю предлагается ввести размер массива, затем сам массив. - После ввода массива он сортируется с помощью функции
sort. - Выводится отсортированный массив.