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

C sortowanie liczb w szyku malejącym

Ostatnio zmodyfikowano 2012-10-04 21:41
Autor Wiadomość
ziommus
Temat założony przez niniejszego użytkownika
C sortowanie liczb w szyku malejącym
» 2012-10-04 20:25:26
Witam, nie mogę odnaleźć błędu w moim kodzie programu którego zadaniem jest posortowanie liczb w szyku malejącym.  Podczas wyświetlania "posortowanej" dynamicznej tablicy na pierwszym miejscu wyświetla mi wartość losową.


C/C++
#include <stdio.h>
#include <stdlib.h>
#define liczba_elementow 3

int main()
{
   
    int * tab;
    int temp;
    int i, j;
   
    tab = malloc( liczba_elementow * sizeof( int ) );
   
    for( i = 0; i < liczba_elementow; ++i )
    {
        printf( "Podaj element nr %d: ", i );
        scanf( "%d",( tab + i ) );
       
    }
   
   
    for( i = 0; i <=( liczba_elementow - 1 ); ++i )
    {
        for( j = i + 1; j <= liczba_elementow; ++j )
        {
            if( *( tab + i ) < *( tab + j ) )
            {
                temp =*( tab + i );
                *( tab + i ) =*( tab + j );
                *( tab + j ) = temp;
            }
           
        }
       
    }
   
    printf( "\n" );
    for( i = 0; i < liczba_elementow; ++i )
    {
        printf( "%d ", *( tab + i ) );
       
    }
   
    free( tab );
    system( "pause" );
    return 0;
}


Dodam, że ten sam program ale z przeciwnym warunkiem w instrukcji if poprawnie sortuje w szyku rosnącym. Za pomoc z góry dziękuję.
P-66082
cyklopek11
» 2012-10-04 21:06:05
Twoje sortowanie bąbelkowe powinno wyglądać tak ( namieszałeś z indeksami "i" oraz "j"):
C/C++
...
for( i = 0; i <( liczba_elementow - 1 ); ++i )
{
    for( j = 0; j < liczba_elementow - 1; ++j )
    {
        if( *( tab + j ) < *( tab + j + 1 ) )
        {
            temp =*( tab + j );
            *( tab + j ) =*( tab + j + 1 );
            *( tab + j + 1 ) = temp;
        }
       
    }
   
}
...
P-66083
ziommus
Temat założony przez niniejszego użytkownika
» 2012-10-04 21:27:17
Niestety ta poprawka nic nie dała, bo dalej mam jeden element tablicy z wartością losową tyle, że tym razem jest to element o indeksie 1.
P-66085
cyklopek11
» 2012-10-04 21:36:16
Czekaj w pierwszej pętli bez jedynki :-)
C/C++
...
for( i = 0; i < liczba_elementow; ++i )
{
    for( j = 0; j < liczba_elementow - 1; ++j )
    {
        if( *( tab + j ) < *( tab + j + 1 ) )
        {
            temp =*( tab + j );
            *( tab + j ) =*( tab + j + 1 );
            *( tab + j + 1 ) = temp;
        }
       
    }
   
}
...
P-66086
ziommus
Temat założony przez niniejszego użytkownika
» 2012-10-04 21:41:37
Sorry, faktycznie w drugiej pętli for ostał mi się znak '=', dzięki za pomoc.
P-66087
« 1 »
  Strona 1 z 1