Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Odwrócone sortowanie

Ostatnio zmodyfikowano 2014-01-09 11:20
Autor Wiadomość
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.
C/C++
#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;
            //printf("%d\n",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;
            }
        }
    }
}
P-101564
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

C/C++
for( int i = j; i > 0; --i ) {
    printf( "%d\n", pom[ i - 1 ] );
}
P-101573
DejaVu
» 2014-01-08 15:51:51
W celu zmiany kolejności sortowania zamień:
C/C++
if( table[ j ] > table[ j + 1 ] )
na:
C/C++
if( table[ j ] < table[ j + 1 ] )
P-101595
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.
P-101656
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.
P-101659
« 1 »
  Strona 1 z 1