Musze napisac analizer ktory bedzie analizowal przebieg kazdego przebiegu algorytmu podany algorytm:
void QuickSortPartition(int E[]){
int m=0;
int n=size(E);
m = partition(E);
if(m>1) then
QuickSortPartition(E[0....m-1]); // wywolanie reurencyjne dla lewego fragmentu tablicy
if((n-m-1)>1) then
QuickSortPartition(E[m+1..n-1]); // wywolanie reurencyjne dla prawego fragmentu tablicy
}
napisalem cos takiego.
void quickSortPartition(int E[]){
int m=0;
int n=E.length;
m=partition(E);
print(E);
if(m>1){
System.out.println("Rekurencja Lewa");
E = sliceLeft(E,m);
quickSortPartition(E);
}
if((n-m-1)>1){
System.out.println("Rekurencja Prawa");
E = sliceRight(E,m+1,n-1);
quickSortPartition(E);
}
}
//Pomocnicze
int[] sliceRight(int tab[],int l,int r){
int[] tabResult = new int[r-l+1];
int count = 0;
for(int i=l; i<=r; i++){
tabResult[count] = tab[i];
count++;
}
return tabResult;
}
int[] sliceLeft(int tab[],int l){
int[] tabResult = new int[l];
int count = 0;
for(int i=0; i<l; i++){
tabResult[count] = tab[i];
count++;
}
return tabResult;
}
int[] swap(int tab[], int i, int j){
int tmp = tab[i];
tab[i] = tab[j];
tab[j] = tmp;
return tab;
}
int partition(int E[]){
System.out.println("Partition");
int l=-1;
int r=0;
int n=E.length;
while(r<n-1){
if(E[r]<E[n-1]){
if(r>l+1){
E = swap(E,r,l+1);
}
l=l+1;
}
r=r+1;
}
if(l+1<n-1)
E = swap(E,l+1,n-1);
return l+1;
}
void print(int tab[]){
for(int i=0; i<tab.length; i++)
System.out.print(tab[i]+";");
System.out.println();
}
Ale niesetety ciagle dostaje bledy...