Piszę sortowanie selekcji, które, biorąc pod uwagę tablicę nieuporządkowanych elementów, wypełni nową tablicę indeksami posortowanych elementów. Na przykład,Sortowanie przy pobieraniu błędnego indeksu tablicy
[3, 2, 1]
powróci
[2, 1, 0] // original indexes of sorted array [1, 2, 3]
Niestety wypełnia układ nieprawidłowo, powtarzając ten sam indeks nad drugą.
To jest mój kod:
void sort(float data[], int indx[], int len) {
int min;
float temp;
float tempData[len];
for (int x = 0; x < len; ++x){
tempData[x] = data[x];
}
for (int i = 0; i < len; ++i) {
min = i;
for (int j = i + 1; j < len; ++j) {
if (tempData[j] < tempData[min]) {
min = j;
}
}
temp = tempData[i];
tempData[i] = tempData[min];
tempData[min] = temp;
indx[i] = min;
}
}
A biorąc pod uwagę to tablica:
[8.5, 10.0, 9.25, 12.5, 12.75, 12.5, 16.0, 14.75, 17.0, 18.0, 21.0, 13.0, 7.25];
zwraca:
[12, 12, 2, 12, 5, 12, 12, 11, 11, 12, 11, 12, 12]
I nie może wydawać się dowiedzieć gdzie błąd logiczny występuje. Czy ktoś mógłby mi pomóc go znaleźć?
Jestem ciekawy, dlaczego ludzie lekceważą to.To dobrze zdefiniowane pytanie. – m0meni
Zastanawiasz się dokładnie. @ AR7 –