C语言寻找第k小元素,小技巧——查找第k小的元素
今天分享一个小技巧,虽然是小技巧但是还是很有价值的,曾经是微软的面试题。题目是这样的,一个无序的数组让你找出第k小的元素,我当时看到这道题的时候也像很多人一样都是按普通的思维,先排序在去第K个,但是当数组非常大的时候,效率不高,那有没有简单的方法了,其实我们早就学过,只是我们不善于思考和变通。很多人刚开始非常热衷于各种排序算法只是了解却没深究,这个题目的复杂度是O(n),原理就是快速排序里面的划分算法。
分析:快速排序选择一个pivot对数组进行划分,左边小于pivot,右边大于等于pivot,所以我们计算左边小于pivot(加上pivot)的个数count总共有多少,如果等于k,正是我们所要的,如果大于k,说明第k小的数在左边,那就在左边进行我们的递归;否则,在右边,那么说明右边的第k-count小的数就是我们所要的,在右边进行我们的递归。
代码如下:
#include"stdio.h"
int GetMinK(int A[],int n,int k)
{
int s=-1,i=0,j=n-1,temp;
int beg=i;
int end=j;
while(s!=k)
{
beg=i;
end=j;
temp=A[i];
while(i
{
while(i=temp)j--;A[i]=A[j];
while(i
}
A[i]=temp;
s=i;
if(s==k)
return A[k];
if(s>k){i=beg;j--;} //在左侧寻找
if(s
}
}
int main()
{
int A[]={2,3,4,1,5,10,9,7,8,6};
int k=3;
printf("第%d小元素为:(从0开始)\n%d ",k,GetMinK(A,10,k));
return 0;
}
C语言寻找第k小元素,小技巧——查找第k小的元素相关推荐
- python list查找元素下标_Python 查找list中的某个元素的所有的下标方法
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
- 分治法——查找问题 —— 寻找一个序列中第k小的元素和查找最大和次大元素
查找问题: 问题一:寻找一个序列中第k小的元素 对于给定的含有n个元素的无序序列,求这个序列中第k(1<=k<=n)小的元素 分析思路: 假设无序序列存放在a[0 - n-1]中,若将a递 ...
- 微信小程序推广技巧、营销方案
微信小程序推广技巧.营销方案 小程序已经成功上线了!那么,小程序线下如何推广?线下门店如何玩转小程序呢? 1.附近的小程序,让商家曝光率更高 小 程序自带"附近的小程序"功能,利用 ...
- 微信小程序布局技巧(三)
微信小程序布局技巧(三) 前言 小程序适配 物理像素 小程序中的px px和rpx转换 应用 尾巴 前言 本文是微信小程序(本文后面统称小程序)布局技巧系列最后一篇文章,主要说明小程序的屏幕适配问题. ...
- 《编程之美》 查找最大(小)的k个元素
http://blog.csdn.net/v_july_v/article/details/6370650 http://blog.csdn.net/insistgogo/article/detail ...
- LeetCode 378. 有序矩阵中第K小的元素(二分查找)
文章目录 1. 题目 2. 解题 2.1 暴力法 2.2 二分查找 1. 题目 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素. 请注意,它是排序后的第k小元素,而 ...
- 快速排序_查找第k小元素
快速排序_查找第k小元素 以下代码可以从数组a[]中找出第k小的元素. 它使用了类似快速排序中的分治算法,期望时间复杂度是O(N)的. 请仔细阅读分析源码,填写划线部分缺失的内容. 一个问题,快排你的 ...
- C语言(CED)输出前k大的数(分治法/局部快速排序):给定一个数组,统计前k大的数并且把这k个数从大到小输出。
)输出前k大的数(分治法/局部快速排序):给定一个数组,统计前k大的数并且把这k个数从大到小输出. [输入] 第一行包含一个整数n,表示数组的大小. 第二行包含n个整数,表示数组的元素,整数之间以一个 ...
- 【算法分析与设计】查找第K大/小元素问题
文章目录 问题描述 思路介绍 思路一:先快排再直接取元素 思路二:维护一个大小为K的乱序数组进行替换 思路三:维护一个堆最后直接取堆顶元素 思路四:分治法 编程实现 第K小元素-思路一-Java编程实 ...
最新文章
- pthread_cond_broadcast相关
- nbu 恢复oracle数据库,关于使用nbu重定向恢复oracle数据库rman报错
- linux 共享内存_什么是物理/虚拟/共享内存——Linux内存管理小结一
- 0xFFFFFF的问题
- RPA机器人来了, 你的饭碗还好吗?
- 音视频开发( 34)---麦克风阵列原理二
- git clone github源码 下载速度很慢的解决方法
- 如何用iMazing备份恢复贪婪洞窟
- c语言在s之后可以直接跟条件,2018C语言第二次作业
- [BZOJ4653 区间]
- 在Proteus上进行LED流水灯的仿真
- 2021暑假Leetcode刷题——Two Pointers(1)
- 基于双服务器的抗关键词猜测攻击的公钥可搜索加密方案
- 大数据现象是怎么形成的?
- 鸿蒙系统(HarmonyOS)--第一章
- 原型模型| 软件工程
- 自己动手写一个番茄小助手
- 9*9数独——C++实现
- 【软著】分享一次自己申请软件著作权的历程
- Java【7】工具包(集合框架、函数式编程、Optional容器)