matematykaszkolna.pl
c++ paula: Mam kod sortowanie przez wybieranie. Jak zmienić aby tez była wyświetlana ilość zamian przy sortowaniu? #include <cstdlib> #include <iostream> #include <ctime> using namespace std; void selectionsort(int n, int t[]); int main(void) { int tab[20]; srand(time(NULL)); for(int i=0; i<20; i++) { tab[i] = rand()%100; cout << tab[i] << " "; } cout << endl; selectionsort(20, tab); for(int i=0; i<20; i++) cout << tab[i] << " "; cout << endl; return 0; } void selectionsort(int n, int t[]) { int i, j, k; for(i=0; i<n; i++) { k=i; for(j=i+1; j<n; j++) if(t[j]<t[k]) k=j; swap(t[k], t[i]); } }
6 cze 20:32
jc: Wpisz przed void selectinonsort(); instrukcję int r; // to bedzie zmienna globalna Zaraz po swap(); dopisz r++; Przed wywołaniem selectinonsort() dopisz r=0; a potem cout << r << endl;
6 cze 20:46
paula: dzieki, choć chce zmienić aby nie była losowana tablica ale sortuje dobrze ale liczy żle r. Oto moje zmiany, moze ktoś wie czemu żle
6 cze 21:14
paula: #include <cstdlib> #include <iostream> #include <ctime> using namespace std; int r; void selectionsort(int n, int t[]); int main(void) { //int tab[3]; srand(time(NULL)); //for(int i=0; i<20; i++) { //tab[i] = rand()%100; // cout << tab[i] << " "; // } //cout << endl; int tab[4]={3, 6, 1, 0}; r=0; selectionsort(4, tab); for(int i=0; i<4; i++) cout << tab[i] << " "; cout << endl; cout << r << endl; return 0; } void selectionsort(int n, int t[]) { int i, j, k; for(i=0; i<n; i++) { k=i; for(j=i+1; j<n; j++) if(t[j]<t[k]) k=j; swap(t[k], t[i]); r++; } }
6 cze 21:14
jc: Teraz bym inaczej napisał. Wróć do pierwszej wersji. Zmień funkcję. int selectionsort(int n, int t[]){ int i, j, k; int r = 0; for(i=0; i<n; i++) { k=i; for(j=i+1; j<n; j++) if(t[j]<t[k]) k=j; swap(t[k], t[i]); r++; } return r; } A potem w main() korzystaj z tego, że funkcja zwraca potrzebą liczbę.
6 cze 21:27
jc: A może dopisz if(k!=i) r++; w miejsce r++; ?
6 cze 21:30