Undrar om någon kan informera hur man sorterar i en struct. Om jag förstår rätt: Antagligen vill han väl swappa hela structarna och inte bara försökmembern, så nåt sånt här borde väl vara bättre. Tänkte bara tillägga att bubblesort bara ska användas för små datamängder eller för data som redan är i nästan rätt ordning. Tja... i o m att man naturligtvis använder den inbyggda funktionen sort, så spelar det ju ingen roll, det här verkar vara för att frågeskrivaren vill lära sig principer. Naturligtvis ska man använda std's sort men jag tänkte bara krydda inlärningen av principerna med lite nyttig teori. Jag sa aldrig att det var fel att använda bubble sort för att lära sig. Alltså, det är väl sådär man INTE gör bubbelsort. Iofs har jag sett det flera gånger tidigare, men jag fick - en gång i tiden - lära mig att man gör typ såhär:Struct sortering med bubblesort
Jag har array[antal].namn och array[antal].försök i samma struct.
Och jag vill sortera efter försök, och kunna skriva ut det sedan.
Är det någon vänlig själ som kan detta?
Mvh
JanSv: Struct sortering med bubblesort
for(int i=0; i<antal-1; i++)
for(int j=i+1; j<antal; j++)
if(array[i].försök > array[j].försök)
swap(array[i].försök, array[j].försök);
for(int i=0; i<antal; i++)
cout << array[i].namn << '\t' << array[i].försök << endl;
Sv: Struct sortering med bubblesort
for(int i=0; i<antal-1; i++)
for(int j=i+1; j<antal; j++)
if(array[i].försök > array[j].försök)
swap(array[i], array[j]);
for(int i=0; i<antal; i++)
cout << array[i].namn << '\t' << array[i].försök << endl;
Sv: Struct sortering med bubblesort
För slumpmässiga data har bubblesort en körtid på O(n^2)Sv: Struct sortering med bubblesort
Sv: Struct sortering med bubblesort
Sv: Struct sortering med bubblesort
int i;
int flag=1;
while(flag==1) {
flag=0;
for(i=0;i<antal-1;i++) {
if(array[i].försök > array[i+1].försök) {
swap(array[i], array[i+1]);
flag=1;
}
}
Trots denna ändring är bubbelsort fortfarande långsam, men den är lätt att lära sig (och förstå) iaf. Alltså man går igenom hela array:en för att se om man kan göra (minst) ett byte och om man gjort det så måste man köra ett varv till.
För att skydda sig mot oändliga loopar (pga fel i koden eller månens fas) kan man förstås lägga till en räknare som gör att man hoppar ut tidigare så det aldrig blir fler varv än tidigare nämda kodexempel.