我试图写一个程序,返回第k最小和最大的元素使用快速排序算法。到目前为止,我只包含了第k个最小元素的逻辑。我正在使用arraylist实现。然而,我没有得到预期的结果。第k个最小元素给出-1作为输出,这是我设置的默认值。
请帮我解决这个问题。
下面是我的java代码。
import java.util.ArrayList;
import java.util.Scanner;
public class KthMaxMin {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
ArrayList<Integer> arr = new ArrayList<Integer>();
for(;;){
System.out.println("Do you want to exit");
int flag = input.nextInt();
if(flag==1){
break;
}
else{
System.out.println("Enter a number");
arr.add(input.nextInt());
}
}
System.out.println("Enter the value of k");
int k = input.nextInt();
int n = arr.size();
KPair kpair = getKMinMax(arr,k,0,n-1);
System.out.println("Kth smallest element is "+kpair.kmin);
}
public static KPair getKMinMax(ArrayList arr, int k, int low, int high){
KPair kp = new KPair();
kp.kmin = -1;
if(low<high){
int index = Partition(arr,low, high);
if(index-low == k-1){
kp.kmin = (int)arr.get(index);
return kp;
}
else if(index-low < k-1)
kp = getKMinMax(arr,k,low,index-1);
else
kp = getKMinMax(arr, k, index + 1, high);
}
return kp;
}
public static int Partition(ArrayList arr, int low, int high){
int i = low-1;
int pivot = (int) arr.get(high);
for(int j=low; j<high; j++){
if((int)arr.get(j) < pivot ){
i++;
int temp = (int)arr.get(i);
arr.set(i, arr.get(j));
arr.set(j,temp);
}
}
int temp = (int)arr.get(i);
arr.set(i, pivot);
arr.set(high,temp);
System.out.println("i+1 is "+(i+1));
return i+1;
}
}
class KPair{
int kmin;// int kmax;
}
暂无答案!
目前还没有任何答案,快来回答吧!