PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : quicksort und insertionsort Übung


Codeq
26.04.2002, 00:10
Aufgabe 1: Programmieren Sie das Verfahren Insertionsort.

Aufgabe 2: Programmieren Sie das Verfahren Quicksort.

Aufgabe 3: Programmieren Sie das Verfahren "Binäre Suche" mithilfe einer rekursiven Funktion. Gesucht werden soll die Position einer Zahl x in einem sortierten Array a. Wenn x mehrfach vorkommt, soll irgendeine Postion, an der x vorkommt, ausgegeben werden. Wenn x nicht vorkommt, soll -1 ausgegeben werden.

Verwenden Sie Insertionsort oder Quicksort, um das Array zu sortieren.


und hier das was ich bis jetzt hab... muss mir noch die main basteln mit den arrays.... brauche aber noch ideen das es netter aussieht :D

sind btw alle 3 in einem source..


#include <iostream>
#include <algorithm>

using namespace std;

void insertionsort (int[] a, int n) {
int i,k ;
for (k=0; k<n; k++) {
v=a[k];
i=k;
while (i>0 && a[i-1]>v)
{
swap (a[i],a[i-1]);
i--;
}
}
}

void quicksort (int[] a, int lo, int hi) {
// lo ist der unterste Index, hi ist der oberste Index des
// zu sortierenden (Teil-)Feldes a
int i=lo
int j=hi
int h;
int x=a[(lo+hi)/2];

// Aufteilung
do {
while (a[i]<x) {
i++;
}
while (a[j]>x) {
j--;
}

if (i<=j)
{
swap (a[i],a[j]);
i++;
j--;
}
} while (i<=j);

// Rekursion
if (lo<j) quicksort(a, lo, j);
if (i<hi) quicksort(a, i, hi);
}




void suche (int a[], int n, int ges) {
int mitte;

// Die mittlere Zahl raussuchen
mitte = (int)((n-a[0])/2);

while (a[mitte] != ges) {
if (a[mitte] < ges) suche(a+mitte, n, ges);
if (a[mitte] > ges) suche(a, mitte, ges);
}
cout << &quot;Die gesuchte Zahl &quot; << ges << &quot; steht an der &quot; << mitte+1 <<&quot;. Position!&quot; << endln;
}


void main () {
int[] a =
cin
}


xOOn
26.04.2002, 20:30
also die ersten beiden habe ich mir nicht angesehen, weil ich ehrlich gesagt immer den sortierer von std nehme; also quicksort nichtmehr so beherrsche, kann ja mal wieder die schulunterlagen rauskramen wenn du was dazu brauchst :D
naja bei der 3. aufgabe hast du keine rekursion drinnen

der start ist suche (feld, 0, lenght, ziel)
und return kommt das ergebniss

int suche (int *a, int v, int b, int ziel)
{
if (b == v)
return -1;
int mitte = (b - v) / 2 + v;
if (a[mitte] == ziel)
return mitte;
if (a[mitte] < ziel)
return suche (a, v, mitte, ziel);
else
return suche (a, mitte, b, ziel);
}