Pues entendi en su mayoría tu respuesta, pero lo mas importante no lo entendí en realidad
Perdona si no me explique bien antes.
Veamos, vamos a suponer que en el programa vamos a meter solo a 2 estudiantes.
Entonces el arreglo con las notas tendra una longitud para almacenar 5*2 valores (5 notas para cada alumno).
Entonces el array de los nombres y de las notas te quedara tal que asi:
Array de los alumnos: [nombre1, nombre2]
Array de las notas: [nota1,nota2,nota3,nota4,nota5,nota6,nota7,nota8,nota9,nota10]
Los espacios solo los he puesto para que veas que las 5 primeras notas del array de notas corresponden al alumno1, y los 5 siguientes a los del alumno2.
Ahora bien, en tu metodo burbuja, por lo que veo haces lo siguiente:
1- Coges el elemento 5*pos+j (que seguramente habrás cambiado a asignaturas*pos+j).
2- Lo comparas con el elemento 5*pos+j+1.
3- Si es mayor intercambias los valores, y si es menor lo dejas tal cual.
4- Repites desde el paso 1 con el siguiente elemento
Bueno pues tu error esta en el paso numero 2, ya que en los arrays que expuse antes:
Array de los alumnos: [nombre1, nombre2]
Array de las notas: [nota1,nota2,nota3,nota4,nota5,nota6,nota7,nota8,nota9,nota10]
Suponte que la mayor nota del alumno1 es la nota 5. Entoces el metodo deberia dejar la nota 5 intacta en lugar de intercambiarla. Pero suponte que la nota5 del alumno1 es MAYOR que la nota6 del alumno2. Entonces sucede lo siguiente:
5*pos+j == 4
notas[5*pos+j] == nota5
5*pos+j+1 == 5
notas[5*pos+j+1] == nota6
nota5 > nota6 == true
Al ser nota5 mayor que nota6 se intercambian los valores, por lo que el valor mas grande del alumno1 pasa a ser la primera nota del alumno2.
¿Lo ves ahora?
La forma de solucionarlo es muy sencilla. Solo tienes que cambiar el numero de iteraciones del bucle de la variable j. En lugar de
for(j=0;j<5;j++)
pon
for(j=0;j<4;j++){
El bucle de la variable x tambien deberia ser
for(x=0;x<4;x++)
pero de todos modos da un poco lo mismo, ya que con que lo recorra al menos 4 veces las demas veces que la recorra no hará nada. Si hubieras puesto
for(x=0;x<200;x++)
Tambien funcionaría.