import java.lang.reflect.Array;
public class Sorting {
public static CompareInt quickSelect(int k, CompareInt[] arr) {
//TODO
return quickSort(arr,0,arr.length-1,k);
}
public static CompareInt quickSort(CompareInt[] arr,int startI,int endI,int k){
if(startI>=endI)
return arr[startI];
int pivLoc = partition(arr,startI,endI);
if(pivLoc == k)
return arr[k];
else if(pivLoc>k)
return quickSelect(arr,startI,pivLoc-1,k);
else
return quickSelect(arr,pivLoc+1,endI,k-pivLoc+1);
}
public static CompareInt quickSelect(CompareInt[] arr,int startI,int endI,int k){
for(int i=startI;i<endI;i++){
if(arr[i].val==k)
return arr[i];
}
return null;
}
public static int partition(CompareInt[] arr,int low,int high){
int pivotIndex = (int)(Math.random()*(high-low)) + low;
//int pivotIndex = (int)(Math.random()*high-1);
//pivotIndex = pivotIndex.nextInt(high-1);
//System.out.println("pivotIndex"+pivotIndex);
//nextInt num.nextInt( 10 );
// int rand = (int)(Math.random() * range) + min;
CompareInt var1 = arr[pivotIndex];
arr[pivotIndex] = arr[arr.length-1];
arr[arr.length-1] = var1;
pivotIndex = arr[high].val;
int i=low,j=high;
CompareInt[] newArr = new CompareInt[arr.length];
for(int k=low;k<high-1;k++){
if(arr[k].val <= pivotIndex){
newArr[i++] = arr[k];
}else{
newArr[j--] = arr[k];
}
}
newArr[i]=arr[high];
for(int z=low;z<high-1;z++){
arr[z]=newArr[z];
}
return i;
}
}
}
Программа работает, но я не получаю желаемого результата, поскольку получаю каждый раз, когда возвращается ноль.
Код реализован так, как в Псевдокоде:
Я думаю, что Al go является верной ссылкой псевдокода:
Псевдокод
QuickSelect возвращает ноль, если не найдено, что я могу вернуть и как я могу улучшить метод QuickSelect.