Odwrócone sortowanie
Ostatnio zmodyfikowano 2014-01-09 11:20
Mutiny Temat założony przez niniejszego użytkownika |
Odwrócone sortowanie » 2014-01-08 11:16:30 Hej, mam problem z programem, ma za zadanie wypisać rozkład liczby na czynniki pierwsze i posortować odwrotnie. Program dobrze dzieli liczbę ale mam problem z sortowaniem odwrotnym. #include <stdio.h> #include <stdlib.h> void bubblesort( int table[], int size ); int main() { int n; printf( "Podaj liczbe wieksza od 1\n" ); scanf( "%d", & n ); int dl = n / 2; int j = 0; int pom[ dl ]; if( n <= 1 ) { printf( "Zla liczba\n" ); return - 1; } int i; int r = n; int pierwsza = 1; for( i = 2; i <= n / 2; i++ ) { while( r % i == 0 ) { r = r / i; pierwsza = 0; pom[ j ] = i; j++; } } if( pierwsza == 1 ) { printf( "Brak dzielnikow roznych od tej liczby\n" ); } int a = 0; bubblesort( pom, j ); for( a = 0; a < j; a++ ) { printf( "%d\n", pom[ a ] ); } return 0; }
void bubblesort( int table[], int size ) { int i, j, temp; for( i = 0; i < size; i++ ) { for( j = 0; j < size - 1 - i; j++ ) { if( table[ j ] > table[ j + 1 ] ) { temp = table[ j + 1 ]; table[ j + 1 ] = table[ j ]; table[ j ] = temp; } } } }
|
|
alixir |
» 2014-01-08 12:48:42 Nie wydaje mi się aby program działał poprawnie (sprawdź na większych liczbach), a co do sortowania to nie ma nawet takiej potrzeby. Twój algorytm zapisze wyniki w tablicy w kolejności od najmniejszej do największej. Nie stanowi więc problemu wyświetlenie tablicy w odwrotnej kolejności for( int i = j; i > 0; --i ) { printf( "%d\n", pom[ i - 1 ] ); } |
|
DejaVu |
» 2014-01-08 15:51:51 W celu zmiany kolejności sortowania zamień:
if( table[ j ] > table[ j + 1 ] )
na:
if( table[ j ] < table[ j + 1 ] )
|
|
Mutiny Temat założony przez niniejszego użytkownika |
» 2014-01-09 10:25:45 Dzięki za odpowiedzi w sumie racja nie potrzebuje jednak posortowanej tablicy jedynie wyświetlić muszę :) A dla czego ma nie działać dla większych elementów ? Sprawdziłem dla 32000, więcej to przekroczę zakres int'a.
|
|
alixir |
» 2014-01-09 11:20:56 Przepraszam mój błąd. Coś mi się wydawało że szukasz wszystkich dzielników podanej liczby. W takim razie algorytm działa prawidłowo. |
|
« 1 » |