使用快速排序算法的数组列表的第k个最小元素

qyyhg6bp  于 2021-07-12  发布在  Java
关注(0)|答案(0)|浏览(198)

我试图写一个程序,返回第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;
}

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题