给定n(1≤n≤1000000)个元素,求第k小数(1≤k≤n)。
输入格式:
一组样例。第一行输入两个整数n和k。第二行输入n个不同的int范围内的数。
输出格式:
输出一行,输出第k小数。
样例输入
5 2 1 5 3 2 4
样例输出
2
#include <iostream> using namespace std; int a[1000001]; void swap(int &a,int &b) { int temp=a; a=b; b=temp; } int partition(int a[],int p,int r) { int x=a[r]; int middle=p; int j; for(j=p;j<r;j++) { if(a[j]<x) { if(j!=middle) swap(a[middle],a[j]); middle++; } } swap(a[middle],a[j]); return middle; } void select(int a[],int p,int r) { if(p<r) { int q=partition(a,p,r); select(a,p,q-1); select(a,q+1,r); } } int main() { int n,k; cin>>n>>k; for(int i=0;i<n;i++) scanf("%d",&a[i]); select(a,0,n-1); cout<<a[k-1]<<endl; return 0; }
解题思路:
1.快速排序
2.线性时间选择,选择其一