gts_krk Temat założony przez niniejszego użytkownika |
C++ sortowanie przez kopcowanie. Bardzo proszę o pomoc. » 2011-11-28 22:44:18 Witam.
Prosze o pomoc przy sortowaniu przez kopcowanie. Mam już program, który sortuje losową tablicę metodą kopcowania ale nie wiem jak zrobic drugą częsc zadania.
Użytkownik wprowadza jaką cześc tablicy posortowac. Nie mam pojęcia jak to zrobic. Dopiero zaczynam programowanie więc nie mam wprawy w tym.
Funkcja ma wyglądac tak :
void kopowanie( int * tablica, lewa, prawa ) {...}
lewa,prawa- krawędzie tablicy, które wybraliśmy do sortowania
KOD:
#include <cstdlib> #include <iostream> #include <ctime>
using namespace std;
void sortowanie_kopcowe( int * tablica, int rozmiar ) { int i, j; for( int m = 2; m <= rozmiar; m++ ) { i = m; j = i / 2; while(( tablica[ i ] > tablica[ j ] ) &&( j > 0 ) ) { swap( tablica[ i ], tablica[ j ] ); i = j; j = i / 2; } } int p; for( int m = rozmiar; m > 1; m-- ) { swap( tablica[ 1 ], tablica[ m ] ); i = 1; j = 2; while( j < m ) { if(( j + 1 < m ) &&( tablica[ j ] < tablica[ j + 1 ] ) ) p = j + 1; else p = j; if( tablica[ p ] <= tablica[ i ] ) break; swap( tablica[ p ], tablica[ i ] ); i = p; j = i + i; } } }
int main( int argc, char * argv[] ) { int k = rand(); int n; int * tab; srand( time( 0 ) ); cout << "Podaj rozmiar tablicy: " << endl; cin >> n; tab = new int[ n ]; for( int i = 0; i < n; i++ ) { tab[ i ] = rand() %( 101 ); cout << " " << tab[ i ]; } sortowanie_kopcowe( tab, n - 1 ); cout << endl; for( int i = 0; i < n; i++ ) { cout << " " << tab[ i ]; } system( "PAUSE" ); return EXIT_SUCCESS; }
Bardzo proszę o pomoc. |
|
DejaVu |
» 2011-11-28 22:47:08 Wystarczy poprawić tą linijkę:
sortowanie_kopcowe( tab, n - 1 );
Przykład:
sortowanie_kopcowe( tab + 10, n - 1 - 20 );
Nie posortuje pierwszych 10 i ostatnich 10 liczb. |
|
gts_krk Temat założony przez niniejszego użytkownika |
» 2011-11-28 22:51:11 Dziękuję za odpowiedz.
Ale jak pózniej w programie zrobic żeby brał pod uwagę lewą i prawą krawędz tablicy a nie rozmiar.
Wiem, że moje pytanie jest głupie ale dopiero zaczynam uczyc się programowania. |
|
DejaVu |
» 2011-11-28 22:55:21 Sortujesz najpierw lewą krawędź tablicy, a potem prawą... wszystko sprowadza się do tej jednej linijki. Czy Ty aby na pewno rozumiesz co napisałeś...? :) Bo ja w to wątpię :) |
|
gts_krk Temat założony przez niniejszego użytkownika |
» 2011-11-28 23:00:17 Rozumiem, że chodzi o jedną linię. Chodz mi o to, że funkcja miała wyglądac tak: void kopcowanie( int * tablica, lewa, prawa ) Czy da się poprawic program żeby do funkcji przekazywac całą tablicę. Nie wiem dlaczego ale prowadzący zajęcia zwrócił na to uwagę. Takie było polecenie mojego zadania. Jeszcze mam pytanie odnośnie kodu. Nie wiem dlaczego nie sortuje mi pierwszego elementu. sortowanie szybkie pisaliśmy tak: void sortowanie_szybkie( int * tablica, int lewa, int prawa ) { int x = tablica[( lewa + prawa ) / 2 ]; int i = lewa, j = prawa; do { while( tablica[ i ] < x ) i++; while( tablica[ j ] > x ) j--; if( i <= j ) { swap( tablica[ i ], tablica[ j ] ); i++, j--; } } while( i <= j ); if( lewa < j ) sortowanie_szybkie( tablica, lewa, j ); if( prawa > i ) sortowanie_szybkie( tablica, i, prawa ); }
|
|
DejaVu |
» 2011-11-28 23:52:31 Z Twoich kilku postów ewidentnie wynika, że Twoim celem jest zaliczyć, a nie zrozumieć. Nie rozumiesz nawet części kodu, który wkleiłeś, a co więcej - nie starasz się go nawet zrozumieć. My tu mamy niepisaną zasadę - dać wędkę, a nie rybę. Ty nie chcesz wędki lecz rybę, więc dla mnie temat jest zakończony. Problem, który masz jest banalny do rozwiązania znając podstawy. Algorytmów z kolei nie omawia się zanim uczeń nie pozna podstaw programowania. Po co poszedłeś na kierunek związany z informatyką skoro nie chcesz się nauczyć programowania...? |
|
gts_krk Temat założony przez niniejszego użytkownika |
» 2011-11-28 23:56:46 Nie prosiłem o napisanie gotowego kodu. Chodzi mi o wskazówki odnośnie tego zadania.
Na większości kierunków technicznych jest programowanie. Kierunek nie musi byc związany mocno z informatyką.
Mimo wszystko, dzięki za pomoc. |
|
DejaVu |
» 2011-11-29 00:02:06 Po pierwsze dostałeś wskazówki.
Po drugie sam wkleiłeś wskazówki. |
|
« 1 » 2 |