sortowanie tablicy

0

Witam mam zrobić zadanie
Dana jest tablica liczb całkowitych (tablicaIn) o rozmiarze n. Napisać funkcję, która znajdzie
liczbę (oznaczmy ją x) występującą w tablicy najwięcej razy – jeżeli istnieje wiele takich liczb to
funkcja ma wybrać największą z nich. Następnie funkcja ma do tablicy wynikowej (tablicaOut)
zapisać elementy w taki sposób, by liczby mniejsze od x (grupa I) znalazły się w niej przed
liczbami większymi lub równymi x (grupa II), ale bez zmiany względnej kolejności liczb w
ramach danej grupy. Argumentami funkcji mają być tablicaIn oraz n, a wartością zwracaną
tablicaOut. Przykład:
tablicaIn: 4, 5, 7, 1, 5, 9, 4, 5, 3, 4 (n=10)
tablicaOut: 4, 1, 4, 3, 4, 5, 7, 5, 9, 5 (x=5)

Znalazłem " x " ,ale nie wiem jak pogrupować względnie

#include <stdio.h>
#include <stdlib.h>
int F(int tab[],int n)
{
    int i,liczba,index;
    int min=tab[0],max=tab[0];

for(i=0;i<n;i++){ //znajdowanie najmniejszej i najwiekszej wartosci elementu tablicy
    if(min>tab[i])
        min=tab[i];
    if(max<tab[i])
        max=tab[i];
}

int rozmiar=max+1;
int tmp[rozmiar];

for(i=0;i<=max;i++){ //ustawianie wszyskich wartosci na jeden mniejsza niz min
    tmp[i]=min-1;
}

for(i=0;i<n;i++){ //zliczanie

    liczba=tab[i];
    ++tmp[liczba];
}
max=0;
for(i=0;i<rozmiar;i++){ //sprawdzenie który z elementów jest najwiecej i ile razy jest w tablicy

    if(max<=tmp[i])
    {
        max=tmp[i];
        index=i;
    }

}
return index;
}

int main()
{
    int n=10,x;
    int tab[10]={ 4, 5, 7, 1, 5, 9, 4, 5, 3, 4}; //przykładowe liczby
    x=F(tab,n);
    printf("x=%d",x);
    return 0;
}

0
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

int *get_sorted(int *arrayIn, size_t n, int c);

int main(void) {
	int numbersIn[] = {4, 5, 7, 1, 5, 9, 4, 5, 3, 4};
  
    size_t N = sizeof(numbersIn) / sizeof(int);	

    int *numbersOut = get_sorted(numbersIn, N, 5);

	printf("Numbers: ");
	for (size_t i = 0; i < N; ++i)
		printf("%d, ", numbersOut[i]);
	printf("\b.\n");

    free(numbersOut);

	return 0;
}

int *get_sorted(int *arrayIn, size_t n, int c) {
	int *arrayOut = calloc(n, sizeof(int));

    assert(arrayOut != NULL && "Not enough memory!");

	size_t j = 0;
	for(size_t i = 0; i < n; ++i) {
		if (arrayIn[i] < c)
			arrayOut[j++] = arrayIn[i];
	}
	for(size_t i = 0; i < n; ++i) {
		if (arrayIn[i] >= c)
			arrayOut[j++] = arrayIn[i];
	}
	
	assert(j == n && "Sorting failure, Not all elements have been copied!");
	
	return arrayOut;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1