Hm, das mit den Array könnte klappen, wenn ich es verstanden hätte...
hier mein code, dann kannste vielleicht besser verstehen:
#include<iostream>
#include<time.h>
#include<stdlib.h>
#include<math.h>
#define MAX 50000
using namespace std;
class CSort
{
private:
int zahl[MAX];
int originalzahl[MAX];
public:
void ziehen();
void kopieren();
void ausgeben();
void bubble_sort();
void quick_sort(int, int);
void dir_einfuegen();
void dir_auswahl();
void shell_sort();
};
/*Hier werden die Zufallszahlen gezogen. Die Obergrenze ist unter MAX definiert (in diesem Fall 50000)*/
void CSort::ziehen()
{
for(int i=0; i<MAX;i++)
originalzahl=rand()%MAX;
}
/*Hier werden die Zufallszahlen kopiert, damit jedes Sortiervefahren die selben Zahlen nutzt und nicht die Zahlen benutzt werden, die ein anderes Sortierverfahren vorher schon sortiert hatte. Diese Funktion muss immer aufgerufen werden, bevor eine Sortierfunktion aufgerufen wird.*/
void CSort::kopieren()
{
for(int i=0; i<MAX;i++)
zahl=originalzahl;
}
void CSort::bubble_sort()
{
int speicher;
for(int j=0; j<MAX;j++)
for(int i=0; i<MAX-1; i++)
if(zahl>zahl[i+1])
{
speicher=zahl;
zahl=zahl[i+1];
zahl[i+1]=speicher;
}
}
void CSort::quick_sort(int links, int rechts)
{
int i=links,k=rechts,speicher, zahl_mitte;
zahl_mitte=zahl[(links+rechts)/2];
do {
while (zahl<zahl_mitte)
i++;
while (zahl_mitte<zahl[k])
k--;
if(i<=k)
{
speicher = zahl;
zahl = zahl[k];
zahl[k] = speicher;
i++;
k--;
}
} while (i<=k);
if(links<k)
quick_sort(links,k);
if(i<rechts)
quick_sort(i, rechts);
}
void CSort::dir_einfuegen()
{
int k, speicher;
for (int i=1; i<MAX; i++)
{
speicher=zahl;
k=1;
while(speicher<zahl[k-1])
{
zahl[k]=zahl[k-1];
k--;
if(k==0)
break;
}
zahl[k]=speicher;
}
}
void CSort::dir_auswahl()
{
int min,j,speicher;
for(int i=0;i<MAX-1;i++)
{
min=i;
for(j=i+1;j<MAX;j++)
if(zahl[j]<zahl[min])
min=j;
speicher=zahl;
zahl=zahl[min];
zahl[min]=speicher;
}
}
void CSort::shell_sort()
{
int h=1,speicher,j,i;
for(h=1;h<=MAX/9;h=h*3+1);
for(; h>0;h/=3)
for(i=h;i<MAX;i++)
{
speicher=zahl;j=i;
while(j>=h&&zahl[j-h]>speicher)
{
zahl[j]=zahl[j-h];
j-=h;
}
zahl=speicher;
}
}
void CSort::ausgeben()
{
for(int i=0; i<MAX;i++)
cout<<zahl<<endl;
}
int main()
{
double zeitdauer_b, zeitdauer_q, zeitdauer_d, zeitdauer_h, zeitdauer_a, zeitdauer_s;
clock_t anfang, ende;
srand((unsigned)time(NULL));
time_t timer=time(NULL);
CSort meineZahlen;
meineZahlen.ziehen();
cout<<" "<<endl<<endl<<endl;
cout.width(41);
cout.fill('-');
cout<<""<<endl;
meineZahlen.kopieren();
anfang=clock();
meineZahlen.quick_sort(0, MAX-1);
ende=clock();
zeitdauer_q=(double)(ende-anfang)/CLOCKS_PER_SEC;
cout<<"| QuickSort: | "<<zeitdauer_q<<" |"<<endl;
cout.width(41);
cout.fill('-');
cout<<""<<endl;
meineZahlen.kopieren();
anfang=clock();
meineZahlen.bubble_sort();
ende=clock();
zeitdauer_b=(double)(ende-anfang)/CLOCKS_PER_SEC;
cout<<"| BubbleSort: | "<<zeitdauer_b<<" |"<<endl;
cout.width(41);
cout.fill('-');
cout<<""<<endl;
meineZahlen.kopieren();
anfang=clock();
meineZahlen.dir_einfuegen();
ende=clock();
zeitdauer_d=(double)(ende-anfang)/CLOCKS_PER_SEC;
cout<<"| Insertionsort: | "<<zeitdauer_d<<" |"<<endl;
cout.width(41);
cout.fill('-');
cout<<""<<endl;
meineZahlen.kopieren();
anfang=clock();
meineZahlen.dir_auswahl();
ende=clock();
zeitdauer_a=(double)(ende-anfang)/CLOCKS_PER_SEC;
cout<<"| Selectionsort: | "<<zeitdauer_a<<" |"<<endl;
cout.width(41);
cout.fill('-');
cout<<""<<endl;
meineZahlen.kopieren();
anfang=clock();
meineZahlen.shell_sort();
ende=clock();
zeitdauer_s=(double)(ende-anfang)/CLOCKS_PER_SEC;
cout<<"| Shellsort: | "<<zeitdauer_s<<" |"<<endl;
cout.width(41);
cout.fill('-');
cout<<""<<endl<<endl<<endl;
// meineZahlen.ausgeben();
}
Die cout ausgaben würde ich halt gerne sortieren, nach der jeweiligen zeit, die gebraucht wurde... hoffe ist nun verständlicher geworden...