首页 > 其他分享 >AcWing 786.第k个数(快速排序)

AcWing 786.第k个数(快速排序)

时间:2023-01-14 23:22:05浏览次数:57  
标签:sort 786 include 基准值 int quick 排序 部分 AcWing

[原链接](https://www.acwing.com/problem/content/788/

题目

#include<cstdio>
#include<iostream>
#include<cstdlib>
using namespace std;
int a[100100];
void quick_sort(int q[], int l, int r)
{
	if (l >= r) return;//到达边界
	int i = l-1;//为了保证开始的部分也能进入排序
	int j = r+1;//同上
	int x = q[(l+r) >> 1];//除2,找到任意一个基准值
	while (i < j)//不能让i和j交叉
	{
		do i ++ ; while (q[i] < x); //以基准值为中心把数划分成两部分
		do j -- ; while (q[j] > x); //左边部分i对应的比基准值小,右边部分j对应的比基准值大。
		if(i < j) swap(q[i], q[j]);//走过来,i之前部分一定是比x小的,j之后的部分一定是比x大的
		//此时i指针正好对应的是比x大的部分,j指针正好对应的是比x小的部分。
		//所以交换对应数值(注意此时ij指向没交换)之后符合我们的目标。
	}
	quick_sort(q, l, j);//通过j指针把数组分成两部分,i之前是都比x小的,j之前则有可能比x大也有可能比x小
	quick_sort(q, j + 1, r); //划分标准就是x,j之后一定是比x都大的
} 
int main()
{
	int n,k;
	cin>>n>>k;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	quick_sort(a,1,n);
	cout<<a[k]<<endl;
	return 0;
}

标签:sort,786,include,基准值,int,quick,排序,部分,AcWing
From: https://www.cnblogs.com/chuixulvcao/p/17052795.html

相关文章

  • AcWing 第 86 场周赛 ABC
    https://www.acwing.com/activity/content/competition/problem_list/2794/4794.健身#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;typedefpa......
  • 希尔排序的思路与C++实现
    tags:DSAC++Sort写在前面写一下希尔排序,其实就是插入排序的升级版,不是一次移动一个,而是一次移动一组.回顾插入排序voidInsertionSort(vector<int>&arr){int......
  • 快速排序算法的递归,迭代法实现(C++)
    tags:DSAC++Sort思路分治法主要分成下面三个步骤:选定基准值(默认是数组首元素),这里称为pivot找到基准值待放置的位置(排序之后的位置),将大于基准值的元素放在基准值......
  • AcWing257 关押罪犯
    题目大意\(\qquad\)给定一张正权无向图,定义冲突值为一个集合内权值最大的边,将一张图上的点,分成两部分,不同部分的点在原图上的边作废,求最小化最大冲突值,并输出。解题思路......
  • 【计算几何】极角排序
    前置知识三角函数。引文给定一个中心点\(O\)与\(n\)个点,求按点与\(O\)的连线与\(x\)轴的夹角排序后的点对。正文显而易见,不论我们如何移动\(O\)点,点对都......
  • 【数据结构与算法】排序算法(Go实现)
    基础排序算法插入排序funcInsertSort(nums[]int){fori:=1;i<len(nums);i++{val:=nums[i]j:=iforj>0&&nums[j-1]>......
  • 用指针数组的形式来比较两个有序数组数据与排序方式是否完全相同
    1#include<iostream>2#include<vector>3usingnamespacestd;4intmain()5{6inta[5]={1,2,3,4,5};//定义两个数组7intb[5]={1,2......
  • 什么是希尔排序?
    本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注!作者|慕课网精英讲师JdreamZhang希尔排序(ShellSort),是计算机科学与技术领域中较为简单的一种排序算法。......
  • Python实现希尔排序、快速排序、归并排序
    快速排序快速排序(英语:Quicksort),又称划分交换排序(partition-exchangesort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都......
  • elasticsearch实现简单的脚本排序(script sort)
    目录1、背景2、分析3、构建数据3.1mapping3.2插入数据4、实现4.1根据省升序排序4.1.1dsl4.1.2运行结果4.2湖北省排第一4.2.1dsl4.2.2运行结果4.3湖北省排第一,其余......