Grazie mille! chiedo l'ultima cosa adesso sembra quasi funzionare solo che va in crash e non riesco a capire cosa sia dovuto penso che sia colpa del vettore contenente gli indirizzi dei pivot. Mi dite dove sto sbagliando?
#include <stdio.h>
#include <stdlib.h>
int Max (int A[],int k)
{
int max=0,i,tmp;
for(i=0;i<k-1;i++)
{
if (max<A[i])
{
max=A[i];
}
}
return max;
}
void Swap (int A[], int i, int j)
{
int tmp;
tmp=A[j];
A[j]=A[i];
A[i]=tmp;
return;
}
int *Kpartition (int *A,int p,int r,int k)
{
int i, j, pivot,z,q,a;
int *B=(int*)malloc(k-1*sizeof(int));
i=p;
j=r;
for (z=k-1;z>0;z--)
{
pivot=Max (A, k);
i=0;
while (i<=j)
{
if (pivot==A[i])
q=i;
if (A[i]>pivot)
{
Swap(A,i,j);
j--;
}
while (A[j]>pivot)
j--;
i++;
}
Swap(A,q,j);
B[z]=j;
j--;
}
return B;
}
void Kquicksort(int A[],int p,int r,int k)
{
int i;
int *q;
if(p>=r)
{
for(i=0; i<=7; i++)
printf("%d ",A[i]);
return;
}
q=Kpartition(A,p,r,k);
for(i=0; i<k-1; i++)
Kquicksort(A, q[i], q[i+1], k);
}
void main ()
{
int A[]={50,10,5,80,4,20,90,2}, n=7;
int B[]={0,0};
int i,k=3;
Kquicksort(A,0,n,k);
return;
}
So che molto probabilmente è sbagliatissimo allocare il vettore in quel modo perchè tutte le volte che chiamo la funzione me ne alloca un altro nuovo o sbaglio?
E in oltre mi sono appena accorta che non sempre li ordina giusto penso che non ce la farò mai a consegnarlo giustoooo