[C++] Losowanie i sortowanie szybkie liczb - program kończy się już po wylosowaniu
Ostatnio zmodyfikowano 2014-05-25 20:19
Borowicz Temat założony przez niniejszego użytkownika |
[C++] Losowanie i sortowanie szybkie liczb - program kończy się już po wylosowaniu » 2014-05-24 14:26:38 Witam, mam do napisania program o następujących założeniach: Wylosować w tablice 100 elementów typu int z przedziału <-500,500> Zaimplementować algorytm ‘quicksort’ z wykorzystaniem rekurencji. Posortować wylosowaną tablicę. Wylosowałem i wypisałem na ekran elementy - tu wszystko jest ok. Problem w tym, że nie chce nie mogę wyświetlić posortowanych liczb - program przerywa działanie po wylosowaniu liczb i zwraca dużą wartość. Mój kod: #include <iostream> #include <fstream> #include <ctime> #include <cstdlib>
#define zad1_r 100
using namespace std;
void zad1();
int main() { zad1(); }
int * losowanie() { srand( time( NULL ) ); int tab[ zad1_r ]; for( int i = 0; i < zad1_r; i++ ) { tab[ i ] = rand() / 1001 - 500; } return tab; }
int * drukuj( int * pobrane ) { cout << "WYLOSOWANA TABLICA\n"; int tab[ zad1_r ]; for( int i = 0; i < zad1_r; i++ ) { cout << tab[ i ] << " "; } }
int partycjonowanie( int * pobrane, int start, int koniec ) { int piwot = pobrane[ koniec ]; int r; while( pobrane[ start ] < piwot ) start++; while( pobrane[ koniec ] > piwot ) koniec--; if( pobrane[ start ] == pobrane[ koniec ] ) start++; else if( start < koniec ) { int zmienna = pobrane[ start ]; pobrane[ start ] = pobrane[ koniec ]; pobrane[ koniec ] = zmienna; } return r; }
void sortowanie( int * pobrane, int start, int koniec ) { if( start < koniec ) { int j = partycjonowanie( pobrane, start, koniec ); sortowanie( pobrane, start, j - 1 ); sortowanie( pobrane, j + 1, koniec ); } } void zad1() { losowanie(); int * pobrane = losowanie(); drukuj( pobrane ); sortowanie( pobrane, 0, 99 ); drukuj( pobrane ); }
Logi do mojego kodu: General: TDM-GCC 4.8.1 64-bit Release Executing g++.exe... g++.exe "F:\Semestr II - informatyka\Podstawy programowania\na forum.cpp" -o "F:\Semestr II - informatyka\Podstawy programowania\na forum.exe" -I"C:\Program Files (x86)\Dev-Cpp\MinGW64\include" -I"C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include" -I"C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.8.1\include" -I"C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++" -L"C:\Program Files (x86)\Dev-Cpp\MinGW64\lib" -L"C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib" -static-libgcc F:\Semestr II - informatyka\Podstawy programowania\na forum.cpp: In function 'int* losowanie()': F:\Semestr II - informatyka\Podstawy programowania\na forum.cpp:21:9: warning: address of local variable 'tab' returned [-Wreturn-local-addr] int tab[zad1_r]; ^
Compilation succeeded in 1.87 seconds with warnings
Pisząc algorytm sortowania szybkiego opierałem się na poniższym kodzie, który jest według mnie prawidłowy #include <iostream> using namespace std;
const int INPUT_SIZE = 10;
void print( int * input ) { for( int i = 0; i < INPUT_SIZE; i++ ) cout << input[ i ] << " "; cout << endl; }
int partition( int * input, int p, int r ) { int pivot = input[ r ]; while( p < r ) { while( input[ p ] < pivot ) p++; while( input[ r ] > pivot ) r--; if( input[ p ] == input[ r ] ) p++; else if( p < r ) { int tmp = input[ p ]; input[ p ] = input[ r ]; input[ r ] = tmp; } } return r; }
void quicksort( int * input, int p, int r ) { if( p < r ) { int j = partition( input, p, r ); quicksort( input, p, j - 1 ); quicksort( input, j + 1, r ); } }
int main() { int input[ INPUT_SIZE ] = { 500, 700, 800, 100, 300, 200, 900, 400, 1000, 600 }; cout << "Input: "; print( input ); quicksort( input, 0, 9 ); cout << "Output: "; print( input ); return 0; }
|
|
Borowicz Temat założony przez niniejszego użytkownika |
» 2014-05-24 14:39:31 A co zrobiłem źle? Bo nie widzę naruszenia regulaminu? |
|
michal11 |
» 2014-05-25 20:19:47 Umiesz czytać warningi ? F:\Semestr II - informatyka\Podstawy programowania\na forum.cpp: In function 'int* losowanie()': F:\Semestr II - informatyka\Podstawy programowania\na forum.cpp:21:9: warning: address of local variable 'tab' returned [-Wreturn-local-addr] |
Zwracasz lokalna zmienną tab |
|
« 1 » |