A13 快速排序 第k小的数

视频链接:50 快速排序 第k小的数_哔哩哔哩_bilibili

Luogu P1177 【模板】排序

 

 

 

 

#include <iostream>
using namespace std;

int n,a[100005];

void quicksort(int l, int r){
  if(l==r) return;
  int i=l-1, j=r+1, x=a[(l+r)/2];
  while(i<j){
    do i++; while(a[i]<x); //向右找>=x的数
    do j--; while(a[j]>x); //向左找<=x的数
    if(i<j) swap(a[i],a[j]);
  }
  quicksort(l,j);
  quicksort(j+1,r);
}

int main(){
  cin>>n;
  for(int i=0;i<n;i++) scanf("%d",&a[i]);
  quicksort(0,n-1);
  for(int i=0;i<n;i++) printf("%d ",a[i]);
}

 

#include<iostream>
#include<algorithm>
using namespace std;

int n,a[100005];

int main(){
  cin>>n;
  for(int i=0;i<n;i++) scanf("%d",&a[i]);
  sort(a,a+n);
  for(int i=0;i<n;i++) printf("%d ",a[i]);
}

 

Luogu P1923 【深基9.例4】求第 k 小的数

#include <iostream>
using namespace std;

int n,k,a[5000010];

int qnth_element(int l, int r){
  if(l==r) return a[l];
  int i=l-1, j=r+1, x=a[(l+r)/2];
  while(i<j){
    do i++; while(a[i]<x); //向右找>=x的数 
    do j--; while(a[j]>x); //向左找<=x的数 
    if(i<j) swap(a[i],a[j]);
  }
  if(k<=j) return qnth_element(l,j);
  else return qnth_element(j+1,r);
}

int main(){
  scanf("%d%d",&n,&k);
  for(int i=0;i<n;i++) scanf("%d",&a[i]);
  printf("%d\n",qnth_element(0,n-1));
}

 

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

int n,k,a[5000010];

int main(){
  scanf("%d%d",&n,&k);
  for(int i=0;i<n;i++) scanf("%d",&a[i]);
  nth_element(a,a+k,a+n);
  printf("%d\n",a[k]);
}

 

posted @ 2023-07-07 21:34  董晓  阅读(581)  评论(0编辑  收藏  举报