[編程題]尋找第K大

一、題目名稱及內容java

[編程題]尋找第K大編程

有一個整數數組,請你根據快速排序的思路,找出數組中第K大的數。 

給定一個整數數組a,同時給定它的大小n和要找的K(K在1到n之間),請返回第K大的數,保證存在。

測試樣例:

[1,3,5,2,2],5,3

返回:2

二、題目解析數組

先將數組a進行快速排序,a[n-K]就是第K大的元素。測試

代碼以下:ui

import java.util.*;
public class Finder {
    public int findKth(int[] a, int n, int K) {
        // write code here
        quickSort(a,0,n-1);
        return a[n-K];
    }
    public void quickSort(int[]a,int low,int high){
        if(low<high){
            int q = partition(a,low,high);
            quickSort(a,low,q-1);
            quickSort(a,q+1,high);
        }
    }
    public int partition(int[]a,int low,int high){//劃分過程,將a數組劃分紅小於主元的部分,主元,大於主元的部分。
        int val = a[high];
        int i = low-1;
        for(int j=low;j<=high-1;j++){
            if(a[j]<=val){
                i++;
                int temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
        int temp = a[i+1];
        a[i+1] = a[high];
        a[high] = temp;
        return i+1;//返回主元
    }
}
相關文章
相關標籤/搜索