masterofeye
Mitglied
Ich habe folgendes Problem.
Die Aufgabenstellung ist: Es soll eine Funktion erstellt werden, welche Arrays mit dem Verfahren „Sortieren durch Mischen“ aufsteigend sortiert.
Funktion mittels Rekursion: sortMerge(n,a)
Dabei wird wie folgt vorgegangen:
Falls a maximal ein Element enthält ist man fertig (bereits sortiert)
Ansonsten
Bilde 2 Hälften des Arrays a und speichere sie in neue Arrays b und c
Tipp: ein neues Array mit m Elementen lässt sich wie folgt erzeugen:
double *h = new double[m];
Der Name des Arrays ist dann h;
Der Typ ist hier double; andere Typen analog;
m ist ein Ausdruck/eine Variable vom Typ int.
Mit delete []h kann man es wieder löschen.
Sortiere b und c mit SortMerge
Mische b und c (siehe Praktikum 9) und speichere das Ergebnis in a
Sooo, ich hänge jetzt an diesem Zeiger zeugs da. Irgend wie will das nicht funktionieren.
Die Aufgabenstellung ist: Es soll eine Funktion erstellt werden, welche Arrays mit dem Verfahren „Sortieren durch Mischen“ aufsteigend sortiert.
Funktion mittels Rekursion: sortMerge(n,a)
Dabei wird wie folgt vorgegangen:
Falls a maximal ein Element enthält ist man fertig (bereits sortiert)
Ansonsten
Bilde 2 Hälften des Arrays a und speichere sie in neue Arrays b und c
Tipp: ein neues Array mit m Elementen lässt sich wie folgt erzeugen:
double *h = new double[m];
Der Name des Arrays ist dann h;
Der Typ ist hier double; andere Typen analog;
m ist ein Ausdruck/eine Variable vom Typ int.
Mit delete []h kann man es wieder löschen.
Sortiere b und c mit SortMerge
Mische b und c (siehe Praktikum 9) und speichere das Ergebnis in a
Sooo, ich hänge jetzt an diesem Zeiger zeugs da. Irgend wie will das nicht funktionieren.
Code:
#include <iostream>
using namespace std;
void main()
{
const int limit=100;
int a[limit],n;
void sortiereAuswahl(int , int []); //Sortierfunktion
cout<<"\nGeben sie die Anzahl ein"<<endl;//Anzahl der Elemente im Array a
cin>>n;
cout<<"\nGeben sie ´das Array ein"<<endl;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
if(n==1)//Array hat nur ein Element
{
cout<<"\nArray ist sortiert";
}
else//Falls es ander ist muss sortiert werden
{
// Neue ARRAY´s erzeugen laut Aufgabenstellung
int m=n/2;
int l=n-m;
int *b;
int *c;
b = new int[m];
c = new int[l];
for(int i=0;i<m;i++)
{
b[i]= a[i];
}
for(int i=m;i<n+m;i++)
{
c[i]= a[i];
}
sortiereAuswahl(m,b);
sortiereAuswahl(n,c);
for(int i=0;i<n;i++)
cout<< c[i];
delete[]c;
delete[]b;
}
}
void sortiereAuswahl(int n, int a[])
{
int stelleMaximum(int,int[]);//Prototyp
for (int anzahl=n;anzahl>1;anzahl--)
{
int index=stelleMaximum(anzahl,a);
int h=a[anzahl-1];//tauschen an letzte Stelle
a[anzahl-1]=a[index];
a[index]=h;
//fuer Test: ausgabe(n,a);
}
}
int stelleMaximum(int n, int a[])
{
if ( n<=0 )
{return -1;}
else
{
int index=0;
for (int i=1;i<n;i++)
if ( a[i]>a[index] )
index=i;
return index;
}
}