Hur man skriver in ett bubbel sort i c#

Permalänk
Medlem

Hur man skriver in ett bubbel sort i c#

Hejhej, jag håller på med en kurs i c# där vi ska göra ett program för försäljare, som sorteras in efter antal sålda artiklar, detta ska sorterar in i 4 nivåer med
hjäp av bubbel sort. har gjort programet och vet hur bubbel sort ska se ut men har problem med att förstår hur jag ska skriva in den i programmet så det fungerar.

så här ser programmet och bubbel sort ut. hoppas här finns någon vänlig själ som kan förklara hur jag ska göra. då jag är nybörjare på det här.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace

ConsoleApplication1a
{

class Program
{
struct Säljar
{
public string Namn, Personnummer, Distrikt;
public int AntalArt;
public int Nivå;
}
static void Main(string[] args)
{
string indata;
Säljar[] SäljarArray = new Säljar[6];
{
for (int i = 0; i < SäljarArray.Length; i++)
{
Console.Write("Namn: "); //Här skrivs säljarens namn in
indata = Console.ReadLine();
SäljarArray[i].Namn = indata;
Console.Write("Personnummer: ");
indata = Console.ReadLine();
SäljarArray[i].Personnummer = indata;
Console.Write("Distrikt: ");
indata = Console.ReadLine();
SäljarArray[i].Distrikt = indata;
Console.Write("AntalArt? ");
indata = Console.ReadLine();
SäljarArray[i].AntalArt = int.Parse(indata);
if (SäljarArray[i].AntalArt > 0 && SäljarArray[i].AntalArt <= 50)
SäljarArray[i].Nivå = 1;
else if (SäljarArray[i].AntalArt > 50 && SäljarArray[i].AntalArt <= 100)
SäljarArray[i].Nivå = 2;
else if (SäljarArray[i].AntalArt > 100 && SäljarArray[i].AntalArt <= 199)
SäljarArray[i].Nivå = 3;
else if (SäljarArray[i].AntalArt > 200 && SäljarArray[i].AntalArt >= 200)
SäljarArray[i].Nivå = 4;
}
}

}
}
}

och bubbel sort ser ut så här.

Den anropas med:
Sortera(SäljarArray);
Metoden:

static void Sortera(Säljare[] Arr)
{
Säljare temp;
bool exchanges;
do
{
exchanges = false;
for (int i = 0; i < Arr.Length - 1; i++)
{
if (Arr[i].AntalArt > Arr[i + 1].AntalArt)
{
// Exchange elements
temp = Arr[i];
Arr[i] = Arr[i + 1];
Arr[i + 1] = temp;
exchanges = true;
}
}
}
while (exchanges);
}

Permalänk
Medlem

I metoden för sortering så ska du ta bort "do" och flytta dit "while (exchanges)" istället eftersom det är där som din loop ska börja. "do" behövs inte.

Permalänk
Medlem

Tackar så mycket. får testa detta.

Permalänk
Medlem

Hjälp

Ska anropa sorteringen efter inläsning och känner mig helt dum i huvudet står helt stilla, hjälp tack.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace

ConsoleApplication1a
{

class Program
{
struct Säljar
{
public string Namn, Personnummer, Distrikt;
public int AntalArt;
public int Nivå;
}

static void Sortera(Säljar[] Arr)
{
Säljar temp;
bool exchanges;
do
{
exchanges = false;
for (int i = 0; i < Arr.Length - 1; i++)
{
if (Arr[i].AntalArt > Arr[i + 1].AntalArt)
{
// Exchange elements
temp = Arr[i];
Arr[i] = Arr[i + 1];
Arr[i + 1] = temp;
exchanges = true;
}
}
}
while (exchanges);
}

static void Main(string[] args)
{

string indata;
Säljar[] SäljarArray = new Säljar[6];
{

for (int i = 0; i < SäljarArray.Length; i++)
{

Console.Write("Namn: "); //Här skrivs säljarens namn in
indata = Console.ReadLine();
SäljarArray[i].Namn = indata;
Console.Write("Personnummer: ");
indata = Console.ReadLine();
SäljarArray[i].Personnummer = indata;
Console.Write("Distrikt: ");
indata = Console.ReadLine();
SäljarArray[i].Distrikt = indata;
Console.Write("AntalArt? ");
indata = Console.ReadLine();
SäljarArray[i].AntalArt = int.Parse(indata);
if (SäljarArray[i].AntalArt > 0 && SäljarArray[i].AntalArt <= 50)
SäljarArray[i].Nivå = 1;
else if (SäljarArray[i].AntalArt > 50 && SäljarArray[i].AntalArt <= 100)
SäljarArray[i].Nivå = 2;
else if (SäljarArray[i].AntalArt > 100 && SäljarArray[i].AntalArt <= 199)
SäljarArray[i].Nivå = 3;
else if (SäljarArray[i].AntalArt > 200 && SäljarArray[i].AntalArt >= 200)
SäljarArray[i].Nivå = 4;
}
}

Sortera(SäljarArray);

}

}

}

Permalänk
Hedersmedlem

Du får nog vara lite tydligare med vad som är fel? Vilken bit är det exakt du har svårt med och vad är det som går fel?

Permalänk
Medlem

det är när jag ska skriva in anropet under inläsning, där ska man göra anropet och skriva ut fältet säger läraren.
Och jag har skrivit

for (int i = 0; i < -1; i++)
{
Console.WriteLine(SäljarArray[i].Namn);
}

Ska man bara skriva ut detta fältet. eller ska man ange typ AntalArt, Nivå Och detta också?
Då jag testat lite olika namn (där det står namn)

Detta är för att programmet ska skriva ut hur många antal artiklar försäljarna har sålt och dela in dessa i 4 olika nivåer.