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