Преобразовать массив так, чтобы сначала располагались все элементы равные максимальному, затем все остальные - 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;
}

Объяснение кода листинга программы

  1. В функции max_element ищется максимальный элемент в массиве.
  2. В функции swap происходит обмен значениями двух переменных.
  3. В функции sort происходит сортировка массива по принципу, что все элементы равные максимальному располагаются в начале массива.
  4. В функции main пользователю предлагается ввести размер массива, затем сам массив.
  5. После ввода массива он сортируется с помощью функции sort.
  6. Выводится отсортированный массив.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4 из 5
Похожие ответы