• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Sortowanie bąbelkowe wskaźniki

HackNation - ogólnopolski hackathon
+1 głos
388 wizyt
pytanie zadane 28 listopada 2024 w C i C++ przez adam234345 Początkujący (400 p.)

Chce aby wyświetlano 2 razy 20 losowych liczb, ale za drugim razem były posortowane nie malejąco, gdzie tu jest błąd? Z góry dzięki za pomoc

 

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>

void sortowanie(int n, int *T)
{

    int i,j,x;
    for (i=1; i<n; i++)
    {
       for (j=n-1; j>=i; j--)
        if (T[j-1]>T[j])
       {
           x=T[j];
           T[j]=T[j-1];
           T[j-1]=x;
       }
    }

}

int main()
{

    srand(time(0));

    int *p;

    p = (int*)malloc(20*sizeof(int));

    int najwieksza=-100, najmniejsza=100;
    int druganajwieksza=-99, druganajmniejsza=99;

    for(int i=0; i<20; i=i+1)
    {
        *(p+i)=-99+rand()%(100-(-99));

        printf("%d ",  *(p+i));

    }

    printf("\n");

    for(int i=0; i<20; i=i+1)
    {
        *(p+i)=-99+rand()%(100-(-99));


        int n=20;
        sortowanie(n, (p+i));
        printf("%d ",  *(p+i));


    }

    free(p);

    return 0;
}


 

komentarz 28 listopada 2024 przez reaktywny Nałogowiec (46,230 p.)
W jakim celu napisałeś ten kod, linie: 32, 33, 47?? Dlaczego sortowanie jest w pętli for (45)? Linia 37 (47 też) dziwnie wygląda.

Musisz przemyśleć jeszcze raz swój program. Chyba tylko funkcja sortowanie jest OK, ale też nie mam pewności. Nie sprawdzałem kodu.

Wydaje mi się, że chciałeś posortować liczby wylosowane wcześniej w pierwszej pętli i wyświetlić nieposortowane i posortowane osobno? Inaczej będziesz miał różne zestawy liczb :) Chyba, ze to było celem?
komentarz 28 listopada 2024 przez adam234345 Początkujący (400 p.)
Mają być różne zestawy liczb
komentarz 28 listopada 2024 przez adam234345 Początkujący (400 p.)
linie 32 i 33 zostały z poprzedniego programu, ich nie powinno tam być
komentarz 28 listopada 2024 przez reaktywny Nałogowiec (46,230 p.)
OK. sortowanie(n, (p+i));powinno być poza pętlą, a int n= 20 dałbym na samym początku i wykorzystał wielokrotnie.
komentarz 28 listopada 2024 przez reaktywny Nałogowiec (46,230 p.)
Odpaliłem program i dostałem:

48 55 -29 -30 -21 95 89 -15 21 69 54 -95 59 -84 -47 22 -61 85 -93 39
 -4 -64 -84 -15 -45 -95 -96 -96 -47 -29 90 -97 --9 -74 39 54-8 69 20 -87
1
komentarz 28 listopada 2024 przez adam234345 Początkujący (400 p.)
gdy sortowanie jest poza pętlą jest problem z i, które zostało wprowadzone przy pętli, i co znaczy wykorzystać wielokrotnie? podmienić tam gdzie jest 20 na n?
komentarz 28 listopada 2024 przez reaktywny Nałogowiec (46,230 p.)
Napisałem poniżej w odpowiedzi, wkleiłem kod.

1 odpowiedź

+1 głos
odpowiedź 28 listopada 2024 przez reaktywny Nałogowiec (46,230 p.)
wybrane 28 listopada 2024 przez adam234345
 
Najlepsza

Proponuje taki kod (nie jest idealny, ale działa):

 

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
 
void sortowanie(int n, int *T)
{
 
    int i,j,x;
    for (i=1; i<n; i++)
    {
       for (j=n-1; j>=i; j--)
        if (T[j-1]>T[j])
       {
           x=T[j];
           T[j]=T[j-1];
           T[j-1]=x;
       }
    }
 
}
 
int main()
{
 
    srand(time(0));
 
    int *p;
    int *r;
    int N = 20;
 
    p = (int*)malloc(N*sizeof(int));
    r = (int*)malloc(N*sizeof(int));
    
    printf("Wylosowane nieposortowane: \n");
    for(int i=0; i<N; i=i+1)
    {
        *(p+i)=-99+rand()%(100-(-99));
 
        printf("%d ",  *(p+i));
 
    }
 
    printf("\n");
 
    printf("Wylosowane nieposortowane - II zestaw: \n");
    for(int i=0; i<N; i=i+1)
    {
        *(r+i)=-99+rand()%(100-(-99));
        printf("%d ",  *(r+i));

    }
 
    sortowanie(N, r);
 
    printf("\nPosortowane - II zestaw: \n");
    
    for(int i=0; i<N; i=i+1)
    {
        printf("%d ",  *(r+i));
    }
 
    free(p);
    free(r);
 
    return 0;
}

 

komentarz 28 listopada 2024 przez adam234345 Początkujący (400 p.)

Wielkie dzięki, teraz działa, przerobiłem tą moją wersje i nawet działa bez dodawania zmiennej r 

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>

void sortowanie(int n, int *T)
{

    int i,j,x;
    for (i=1; i<n; i++)
    {
       for (j=n-1; j>=i; j--)
        if (T[j-1]>T[j])
       {
           x=T[j];
           T[j]=T[j-1];
           T[j-1]=x;
       }
    }

}

int main()
{

    srand(time(0));

	int *p;
	int n=20;
	p = (int*)malloc(20*sizeof(int));

	for(int i=0; i<n; i=i+1)
    {
        *(p+i)=-99+rand()%(100-(-99));

        printf("%d ",  *(p+i));
    }

    printf("\n");
    printf("\n");




  for(int i=0; i<n; i=i+1)
    {
        *(p+i)=-99+rand()%(100-(-99));
        printf("%d ",  *(p+i));
    }

        printf("\n");
        printf("\n");



    sortowanie(n, p);
    for(int i=0; i<n; i=i+1)
    {
        printf("%d ",  *(p+i));
    }


    free(p);

    return 0;
}


 

komentarz 28 listopada 2024 przez reaktywny Nałogowiec (46,230 p.)
Można i tak.

Jeszcze możesz popracować nad zapisem: -99+rand()%(100-(-99));

I to: p = (int*)malloc(20*sizeof(int)); jest stary zapis, dziś już się inaczej robi tablicę int-ów. Chyba, ze to C, a nie C++ ??

Na koniec detal:

printf("\n");

printf("\n");

zastąp:

printf("\n\n");   :)
komentarz 28 listopada 2024 przez reaktywny Nałogowiec (46,230 p.)

Podobne pytania

0 głosów
1 odpowiedź 1,532 wizyt
pytanie zadane 18 grudnia 2018 w C i C++ przez pysiek Początkujący (280 p.)
0 głosów
1 odpowiedź 885 wizyt
pytanie zadane 24 października 2021 w C i C++ przez pita Nowicjusz (180 p.)
0 głosów
1 odpowiedź 1,197 wizyt
pytanie zadane 2 lutego 2021 w C i C++ przez Kamirru9 Początkujący (300 p.)

93,626 zapytań

142,551 odpowiedzi

323,036 komentarzy

63,130 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 1452p. - dia-Chann
  2. 1437p. - DziarnowskiJ
  3. 1411p. - Łukasz Piwowar
  4. 1409p. - CC PL
  5. 1371p. - raydeal
  6. 1369p. - Adrian Wieprzkowicz
  7. 1360p. - Tomasz Bielak
  8. 1335p. - robwarsz
  9. 1275p. - Maurycy W
  10. 1141p. - ssynowiec
  11. 1116p. - rucin93
  12. 1100p. - Mariusz Fornal
  13. 885p. - Dominik Łempicki (kapitan)
  14. 847p. - Grzegorz Aleksander Klementowski
  15. 838p. - Wojciech Malicki
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...