Предположим, что у меня есть
z[7]={0, 0, 2, 0, 1, 2, 1}
, что означает - первое наблюдение распределено в группе 0, вторая группа наблюдателей 0, третья группа 2 и т. Д.
и я хочу написать эффективный код, чтобы получить массив 3X? так, что в первом ряду у меня есть все наблюдения, выделенные в первой группе, во втором ряду все объекты, выделенные во второй группе и т. д. что-то вроде
0, 1, 3
4, 6
2, 5
и это должно быть общим, может быть, я мог бы иметь
z={0, 0, 2, 0, 1, 2, 1, 3, 4, 2, 0, 4, 5, 5, 6, 7, 0}
поэтому число столбцов неизвестно
Я сделал свою домашнюю работу, и к этому сообщению прикреплен код, но должен быть лучший способ сделать это. Я верю, что с указателями, но я действительно не знаю, как.
#include <stdio.h>
int main(){
int z[7]={0, 0, 2, 0, 1, 2, 1}, nj[3], iz[3][7], ip[3], i, j;
for(j=0; j<3; j++){
ip[j] = 0;
nj[j] = 0;
}
for(i=0; i <7; i++ ){
nj[z[i]] = nj[z[i]] + 1;
iz[z[i]][ip[z[i]]] = i;
ip[z[i]] = ip[z[i]] + 1;
}
for(j=0; j<3 ;j++){
for(i=0; i < nj[j]; i++){
printf("%d\t", iz[j][i]);
}
printf("\n");
}
return 0;
}