Que tal gente, soy nuevo en el foro. Resulta q me estoy iniciando en el tema de la programacion, estoy en lo mas basico, y me encuentro con este ejercicio:
  Escribe un programa que lea diez enteros comprendidos entre 1 y 10, los almacene en
un vector y escriba por pantalla la cantidad de elementos de cada número que contiene.
Ejemplo: Dado el siguiente vector [2, 2, 2, 3, 3, 4, 4, 4, 7, 7]
La salida producida sería:
Existen 3 elementos del número 2
Existen 2 elementos del número 3
Existen 3 elementos del número 4
Existen 2 elementos del número 7 
Que me esta complicando la vida. Les cuento, con mis escasos conocimientos, pude hacer este codigo que obviamente no me funciona, y quiero q me lo revisen a ver q es lo q falta, y que es lo que esta mal:  
 Código PHP:
    #include <stdio.h>
int main (){
int vector[4];
int i, j, k;
int n = 0;
printf("Escriba 4 numeros:\n");
for (i=0;i<4;i++){
    printf("Introduzca numero %i: ", i+1);
    scanf("%i", &vector[i]);
}
for(k=0;k<4;k++){
    for(j=k+1;j<4;j++){
        if (vector[k] == vector[j]){
            n ++;
            
           }
    }
}
for(i=0;i<4;i++){
printf("Existen %i elementos del numero %i\n", n, vector[i]));
}
system("pause");
return 0;
} 
    
  CAMBIE EL NUMERO 10 a 4 para hacerlo mas corto al probarlo, pero la idea es la misma. 
Les juro que no se cuantas horas ya estoy viendo de resolverlo y no puedo!
Busque ayuda en otro foro y me dieron este codigo, que funciona perfectamente, pero no lo entiendo! Intente de entenderlo con el debugger paso a paso pero no hay caso! es desesperante!!
Les dejo el codigo que funciona pero no entiendo (despues les especifico cuales son las partes que no entiendo):  
 Código PHP:
    #include<stdio.h>
int main(){
    int i,j,n,tem;
    printf("Cuantos numeros desea introducir\n");
    scanf("%d",&n);
    int Array[n];
    for(i=0;i<n;i++){
        printf("Ingrese la cantidad No, %d\n",i+1);
        scanf("%d",&Array[i]);
    }
    for(i=0;i<n-1;i++){
        for(j=0;j<n;j++){
            if(Array[j]>Array[j+1]){ //NO ENTIENDO ESTA PARTE!  COMO UN NUMERO VA A SER MAYOR QUE ESE NUMERO +1??? No significa eso?
                tem = Array[j];
                Array[j] = Array[j+1];    //NO ENTIENDO ESTAS 3 LINEAS!! PARA QUE EL METODO DE LA BURBUJA!!???
                Array[j+1] = tem;
            }
        }
    }
    tem = 1;
    for(i=1;i<=n;i++){                //TAMPOCO ENTIENDO ESTAS 3 o 4 LINEAS!!
        if(Array[i] != Array[i-1]){
            printf("Existen %d elementos del numero %d\n",tem,Array[i-1]);
            tem = 1;
        }
        else
            tem++;
    }
    return (0);
} 
    
  
Bueno espero que me puedan ayudar, para los que saben seguramente sea una boludez el tema, pero estoy muerto de ganas de aprenderlo y tengo que recurrir aca porque ya van varias horas que no me sale! 
Muchas gracias!