Code:
#include <iostream.h>
using namespace std;
int middle (int b[]) //sucht den Mittelwert eines Feldes
{
int big=0;
int small=b[0];
int average=0;
for (int i=0;i<sizeof(b);i++)
{
if (b[i]<small) small=b[i];
if (b[i]>big) big=b[i];
}
average=(big+small)/2;
return(average);
}
int mysort(int feld[256])
{
int m;
int n=0;
int o;
int p;
int small[256];
int big[256];
int klein[256];
int gross[256];
for (int i=0;i<256;i++)
{
klein[i]=999;
gross[i]=999;
big[i]=999;
small[i]=999;
}
if (feld[0]!=999)
{
//Mittelwert abholen und schauen wieviele Elemente kleiner als der
//Mittelwert sind (Anzahl=p)
m=middle(feld);
for (int i=0;i<256;i++)
{
if (feld[i]<m) n++;
}
p=n;
o=256-p; //Anzahl der Elemente die groesser als der
//Mittelwert sind
//ein Array für die kleinen und eins für die grossen
//die kleinen ins entsprechende Array kopieren
n=0;
for (int i=0;i<256;i++)
{
if (feld[i]<m)
{
small[n]=feld[i];
n++;
}
}
//das gleiche für die grossen...
n=0;
for (int i=0;i<256;i++)
{
if (feld[i]>=m)
{
big[n]=feld[i];
n++;
}
}
// ein Array für die kleinen sortierten Werte und eins für die
//grossen
klein=mysort(small);
gross=mysort(big);
//feld aus den beiden sortierten Array zusammensetzen
for (int i=0;i<p;i++)
{
feld[i]=klein[i];
}
n=0;
for (int i=(n+1);i<256;i++)
{
feld[i]=gross[n];
n++;
}
}
return(feld);
}
int main() {
int a[9]={5,2,8,1,4,5,7,3,0};
int b[256];
int i;
for (i=0;i<9;i++)
{
b[i]=a[i];
}
for (int n=i;n<256;n++)
{
b[n]=999;
}
b=mysort(b);
system("PAUSE");
return 0;
}
Du deklarierst klein innerhalb von mysort() und weist klein dann das Ergebnis zu?
Stichwort "Rekursion" ich schnappe mir die Liste mit den kleineren werten und ordne diese zuerst...
Was ich so seltsam finde ist dass er klein nicht als array zu akzeptieren scheint.
Lesezeichen