noodles83
25-08-2006, 16:46
ciao!
sto cercando di implementare il quick sort sia la versione normale che quella randomizzata.
La prima mi viene senza problemi, la senconda invece non mi da i risultati che volevo e non caspisco il perchè... mi date un consiglio?
private static int randomPartition(int[] array,int start, int end){
int index = (int)Math.random() * end;
scambio(array,start,index);
return partition(array,start,end);
}
private static int partition(int[] array,int start, int end){
int pivot = array[start];
int i = start - 1;
int j = end + 1;
while (true) {
while (true) {
j--;
while (array[j] > pivot)
j--;
i++;
while (array[i] < pivot)
i++;
if (i < j)
scambio(array, i, j);
else
return j;
}
}
}
public static void quicksort(int[] array, int start, int end){
if(start < end){
int pivot=randomPartition(array,start,end);
quicksort(array,start,pivot);
quicksort(array,pivot+1,end);
}
}
dove sbaglio?
sto cercando di implementare il quick sort sia la versione normale che quella randomizzata.
La prima mi viene senza problemi, la senconda invece non mi da i risultati che volevo e non caspisco il perchè... mi date un consiglio?
private static int randomPartition(int[] array,int start, int end){
int index = (int)Math.random() * end;
scambio(array,start,index);
return partition(array,start,end);
}
private static int partition(int[] array,int start, int end){
int pivot = array[start];
int i = start - 1;
int j = end + 1;
while (true) {
while (true) {
j--;
while (array[j] > pivot)
j--;
i++;
while (array[i] < pivot)
i++;
if (i < j)
scambio(array, i, j);
else
return j;
}
}
}
public static void quicksort(int[] array, int start, int end){
if(start < end){
int pivot=randomPartition(array,start,end);
quicksort(array,start,pivot);
quicksort(array,pivot+1,end);
}
}
dove sbaglio?