今天分享一个小技巧,虽然是小技巧但是还是很有价值的,曾经是微软的面试题。题目是这样的,一个无序的数组让你找出第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小的元素相关推荐

  1. python list查找元素下标_Python 查找list中的某个元素的所有的下标方法

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  2. 分治法——查找问题 —— 寻找一个序列中第k小的元素和查找最大和次大元素

    查找问题: 问题一:寻找一个序列中第k小的元素 对于给定的含有n个元素的无序序列,求这个序列中第k(1<=k<=n)小的元素 分析思路: 假设无序序列存放在a[0 - n-1]中,若将a递 ...

  3. 微信小程序推广技巧、营销方案

    微信小程序推广技巧.营销方案 小程序已经成功上线了!那么,小程序线下如何推广?线下门店如何玩转小程序呢? 1.附近的小程序,让商家曝光率更高 小 程序自带"附近的小程序"功能,利用 ...

  4. 微信小程序布局技巧(三)

    微信小程序布局技巧(三) 前言 小程序适配 物理像素 小程序中的px px和rpx转换 应用 尾巴 前言 本文是微信小程序(本文后面统称小程序)布局技巧系列最后一篇文章,主要说明小程序的屏幕适配问题. ...

  5. 《编程之美》 查找最大(小)的k个元素

    http://blog.csdn.net/v_july_v/article/details/6370650 http://blog.csdn.net/insistgogo/article/detail ...

  6. LeetCode 378. 有序矩阵中第K小的元素(二分查找)

    文章目录 1. 题目 2. 解题 2.1 暴力法 2.2 二分查找 1. 题目 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素. 请注意,它是排序后的第k小元素,而 ...

  7. 快速排序_查找第k小元素

    快速排序_查找第k小元素 以下代码可以从数组a[]中找出第k小的元素. 它使用了类似快速排序中的分治算法,期望时间复杂度是O(N)的. 请仔细阅读分析源码,填写划线部分缺失的内容. 一个问题,快排你的 ...

  8. C语言(CED)输出前k大的数(分治法/局部快速排序):给定一个数组,统计前k大的数并且把这k个数从大到小输出。

    )输出前k大的数(分治法/局部快速排序):给定一个数组,统计前k大的数并且把这k个数从大到小输出. [输入] 第一行包含一个整数n,表示数组的大小. 第二行包含n个整数,表示数组的元素,整数之间以一个 ...

  9. 【算法分析与设计】查找第K大/小元素问题

    文章目录 问题描述 思路介绍 思路一:先快排再直接取元素 思路二:维护一个大小为K的乱序数组进行替换 思路三:维护一个堆最后直接取堆顶元素 思路四:分治法 编程实现 第K小元素-思路一-Java编程实 ...

最新文章

  1. pthread_cond_broadcast相关
  2. nbu 恢复oracle数据库,关于使用nbu重定向恢复oracle数据库rman报错
  3. linux 共享内存_什么是物理/虚拟/共享内存——Linux内存管理小结一
  4. 0xFFFFFF的问题
  5. RPA机器人来了, 你的饭碗还好吗?
  6. 音视频开发( 34)---麦克风阵列原理二
  7. git clone github源码 下载速度很慢的解决方法
  8. 如何用iMazing备份恢复贪婪洞窟
  9. c语言在s之后可以直接跟条件,2018C语言第二次作业
  10. [BZOJ4653 区间]
  11. 在Proteus上进行LED流水灯的仿真
  12. 2021暑假Leetcode刷题——Two Pointers(1)
  13. 基于双服务器的抗关键词猜测攻击的公钥可搜索加密方案
  14. 大数据现象是怎么形成的?
  15. 鸿蒙系统(HarmonyOS)--第一章
  16. 原型模型| 软件工程
  17. 自己动手写一个番茄小助手
  18. 9*9数独——C++实现
  19. 【软著】分享一次自己申请软件著作权的历程
  20. Java【7】工具包(集合框架、函数式编程、Optional容器)

热门文章

  1. 第二篇:浅谈自定义头文件可能导致的重定义问题
  2. mysql增加自定义函数功能
  3. 如何对行 表 数据库加锁
  4. 32位ubuntu 使用pae
  5. 网上邻居不能正常访问的处理
  6. QQ抢车位外挂(起始篇)--小研究成果展示
  7. uushare.com 增加了小组(群)功能
  8. python脚本性能分析
  9. [转载] Python基于机器学习方法实现的电影推荐系统
  10. [转载] javascript入门_WebAssembly入门-仅使用14行JavaScript