www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheC#-Forum

DerHulk

Gepostet:
03.02.2006 22:15

Sortieralgorithmus  
Hier mal ein paar typischen Sortieralgorithmus implementiert in c#, wer Fehler findet oder verbesserungs Vorschläge hat, nur her damit!

Quicksort:


	
public void QuicksortAlgo(ref int[] a, int l, int r)//a=Array, l=linker Rand, r=rechter Rand
{

if(r>l)
{ //solange mehr als 1 Folgenelement existiert
int i=l-1, j=r, tmp; //Variableninitialisierung mit Folgenrändern

for(;;){ //Endlosschleife; bricht ab, wenn i>=j
while(a[++i]<a[r]); //inkrem., bis größeres Element gefunden wird
while(a[--j]>a[r] && j>i); //dekrem., bis kleineres Element gefunden wird
if(i>=j) break; //brich ab, wenn sich die Folgenzeiger treffen
tmp=a; a[i]=a[j]; a[j]=tmp;//tausche kleineres mit größerem Element
}
tmp=a[i]; a[i]=a[r]; a[r]=tmp; //tausche Trennelement

QuicksortAlgo(ref a, l, i-1); //rekursiver Aufruf für linke Teilfolge
QuicksortAlgo( ref a, i+1, r); //rekursiver Aufruf für rechte Teilfolge
}
}
Zum Seitenanfang    
 
DerHulk

Gepostet:
03.02.2006 22:33

SelectionSort  

// sortiert ein Array von Zahlen
public void selectionSort(int[] array)
{
for (int index=0; index< array.Length-1; index++)
{ //durchlaufe das Array
int minIdx = minimum(array, index, array.Length-1);
vertausche(array,index,minIdx);
}
}
//die gefunden kleiner Zahl wird mit dem aktuellen Zahl vertauscht
private void vertausche(int[] array, int x, int y)
{
int zwischenspeicher;
zwischenspeicher = (array[x]);
array[x] = array[y];
array[y] = zwischenspeicher;
}
// such inerhalb des Array nach einer kleineren Zahl als die aktuelle und gibt deren Index zurück
private int minimum(int[] array, int anfang, int ende)
{
int minIdx = anfang;
for (int index=anfang+1; index<=ende; index++)
{ //durchlaufe das Array
if (array[index] < array[minIdx])
{
minIdx = index; //kleiner Zahl gefunden
}
}
return minIdx;
}
Zum Seitenanfang    
 
DerHulk

Gepostet:
03.02.2006 22:49

Mergesort  

public int[]MergeSort(int[] Liste)
{
int Listenlänge = Liste.Length;
int[] SortierteListe = Liste;

//Sortierung der Liste wenn diese größer als 1 ist
if(Listenlänge > 1)
{
int[] LinkeListe = new int[Listenlänge/2];
int[] RechteListe = new int[Listenlänge - LinkeListe.Length];
//LinkeListe Füllen
for(int i =0;i< LinkeListe.Length;i++)
{
LinkeListe = Liste[i];
}
//RechteListe Füllen
for(int i = 0;i< RechteListe.Length;i++)
{

RechteListe[i] = Liste[i + LinkeListe.Length];
}
//mischen der Listen un rekursivität
SortierteListe = merge(MergeSort(LinkeListe),MergeSort(RechteListe));
}
return SortierteListe;
}
private int[] merge (int[] links, int [] rechts)
{
int[] mergelist = new int[links.Length + rechts.Length];
int gemischtlauf = 0;//laufvariablen für die gemischte liste
int Linkslauf = 0;//laufvariablen für die linke seite
int Rechtslauf = 0;//laufvariablen für die rechte seite

while(Linkslauf < links.Length & Rechtslauf < rechts.Length)
{
//sortieren
if(links[Linkslauf] >= rechts[Rechtslauf])
{
mergelist[gemischtlauf] = rechts[Rechtslauf];
gemischtlauf++;
Rechtslauf++;
}
else
{
mergelist[gemischtlauf] = links[Linkslauf];
gemischtlauf++;
Linkslauf++;
}
}
while(Linkslauf<links.Length)
{
mergelist[gemischtlauf] = links[Linkslauf];
gemischtlauf++;
Linkslauf++;
}
while(Rechtslauf<rechts.Length)
{
mergelist[gemischtlauf] = rechts[Rechtslauf];
gemischtlauf++;
Rechtslauf++;
}
return mergelist;
}
Zum Seitenanfang