Wybieranie kolejno najmniejszej liczby i kopiowanie do tablicy wskaźników

0

Witam,

Postanowiłem w ramach treningu napisać sobie program, który będzie za każdym razem wybierał najmniejszą liczbę w tablicy, usuwał ją i zapisywał jej adres w drugiej tablicy wskaźników w kolejności rosnącej od 0. Na końcu zaś planowałem wyświetlić posortowaną listę liczb za pomocą wskaźników. Mam taki kod:

int main() {

	int numbers[10] = {21, 42, 1, 32, 44, 17, 25, 33, 98, 76};
	int *pointers[10];
	int i, min, key, tmp, j;
	int count = 10;
	int sorted = 0;

	for (j=0; j<10; j++) {

		min = numbers[sorted];

		for (i=sorted; i<count; i++) {
			if (numbers[i]<min) {
				min = numbers[i];
				key = i;
			}
		}

		tmp = numbers[count-1];
		numbers[count-1] = min;
		numbers[key] = tmp;
		pointers[sorted] = &numbers[count-1];
		count--;
		sorted++;

	}

	for (i=0; i<10; i++) {
		printf("%d. %d\n", i+1, *pointers[i]);
	}

	getch();
	return 0;

}

Jednak nie wiem dlaczego, ale jest on niepoprawny. Ogólnie chodziło mi o to, że 10 razy (pętla for ze zmienną j) wybieram minimum z tablicy, usuwam daną liczbę z tej tablicy (zamieniam ją z ostatnią i w kolejnej pętli liczę już bez tego ostatniego indeksu) i zapisuje jej adres w drugiej tablicy wskaźników.

Program się oczywiście kompiluje, ale nie spełnia swojej roli. Co jest nie tak?

0

Postanowiłem w ramach treningu napisać sobie program, który będzie za każdym razem wybierał najmniejszą liczbę w tablicy, usuwał ją i zapisywał jej adres w drugiej tablicy wskaźników w kolejności rosnącej od 0.
hyyh, a nie można by posortować tej tablicy jakimś lepszym algorytmem? ;-)

poza tym, skoro chcesz usuwać liczbę z tablicy, to nie zamieniaj z ostatnim elementem, tylko po prostu nadpisz ostatnim elementem i zmniejsz count. zapisywanie wartości na koniec tylko po to żebyś tam więcej już nie spojrzał to strata czasu.

jaką wartośc początkową ma u ciebie key?

0

Count na początku ma 10, ale w pętli używam warunku "<", więc ogólnie idziemy aż do numbers[9], potem numbers[8] itd... Algorytm sortowania rzeczywiście głupi, ale tak chciałem sobie poćwiczyć :) Zaraz spróbuję zmienić to, o czym mówisz i zobaczymy, co z tego wyjdzie :) Dzięki!

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