Programmering 1- bubble sort- Hjälp!
Suttit tre kvällar nu och försökt få koden att fungera men lyckas inte. Vänder mig nu till er!
Uppgift: Skapa två listor. En osorterad och en sorterad. Listorna ska innehålla fyra personen och tillslut listas i åldersordning med den yngsta först. En rad ska även skrivas ut som talar om var den sökta (förutbestämda) personen ligger på listan.
Problem: Jag får fram båda listorna. Dock så försvinner den äldsta personen i den sorterade listan. Och sista raden talar om var personen ligger i den osorterade listan, det ska vara i den sorterade!
Kod så här långt:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
const int n = 3;
class person // Klass: Innehåller en person
{
public:
string name;
int age;
void print()
{
cout << name << ", " << age << " \x8Fr." << endl; // Talar om vad som ska skrivas ut
}
void setInfo(string _name, int _age) // Sätter den info som krävs
{
name = _name;
age = _age;
}
};
void bubblesort(person p[], int n)
{
int i = 0;
for (i = 0; i < n; i++) // Yttre loop söker igenom hela listan
{
int nrLeft = n - i; // Inre loop, element för element
for (int j = 0; j < nrLeft; j++)
{
if (p[j].age> p[j + 1].age) // Jämför elementen
{
// Byter plats
person temp = p[j];
p[j] = p[j + 1];
p[j + 1] = temp;
}
}
}
}
int linsok(person p[], int n, int a) // Linjär sökning av ålder
{
for (int i = 0; i < n; i++) // Går igenom hela listan
{
if (p[i].age == a) // Hittar det vi söker efter eller...
{
return i;
}
}
return -1; // ... så hittas inte personen
};
int main() {
//Skapar en lista med personer - namn/ ålder
cout << "-- Osorterad lista --" << endl << endl; // Skriver ut titel
person family[4];
family[0].setInfo("Vilfred", 5); // Person 1. Börja från 0!
family[0].print(); // Anropar void print()
family[1].setInfo("Finn", 7);
family[1].print();
family[2].setInfo("Eliot", 9);
family[2].print();
family[3].setInfo("Hjalmar", 3);
family[3].print();
cout << endl << "-- Sorterad lista --" << endl << endl; // Skriver ut titel
bubblesort(family, n); //Anropar funktionen bubblesort för att sortera vektorn Familj.
for (int i = 0; i < n; i++) //Den sorterade listan skrivs ut
cout << family[i].name << ", " << family[i].age << " \x8Fr." << endl; // Berättar vad som ska skrivas ut
int index = linsok(family, 3, 5); //Söker efter en viss person i vektorn Familj som innehåller 4 element och ska vara 5 år gammal
if (index == -1)
cout << "Personen hittas ej!"; // Antingen hittas inte personen eller...
else
cout << endl << family[index].name << " finns p\x86 rad " << index << " i index."; // ... så hittar programmet personen och info skrivs ut.
cin.get();
return 0;
}
RESULTAT
-- Osorterad lista --
Vilfred, 5 år.
Finn, 7 år.
Eliot, 9 år.
Hjalmar, 3 år.
-- Sorterad lista --
Hjalmar, 3 år.
Vilfred, 5 år.
Finn, 7 år.
Vilfred finns på rad 1 i index.