从N个元素中选择第i小的元素
时常在笔试,面试题中看到这个问题,《算法导论》中给出了很好的解答。
Selection of the ith smallest element of the array A can be done in θ(n) times.
The psuedocode is following:
Randomized_Select(A,p,r,i)
{
if p==r
then return A[p]
q=Randomized_Partition(A,p,r)
k=q-p+1
if i==k
then return A[q]
else if i<k
then return Randomized_select(A,p,q-1,i)
else
return Randomized_select(A,q+1,r,i-k)
}
=====================================
Randomized_Partition(A,p,r)
{
i=RANDOW(p,r)
exchange A[r] ↔ A[i]
return Partition(A,p,r)
}
=====================================
Partition(A,p,r)
{
x=A[r]
i=p-1
for j=p to r-1
if A[j]<=x
then i=i+1
exchange A[i]↔A[j]
exchange A[i+1] ↔A[r]
return i+1
}
Transfer to C# code:
Codenamespace SelectMinimum{class Program {static void Main(string[] args) {int[] A = new int[] {0,25,12,14,57,45,18,75,85,74,45,63,35,28,39 }; SelectSort ss = new SelectSort();int result; result=ss.Randomized_Select(A,0,14,11); Console.WriteLine(result); Console.ReadLine(); } } public class SelectSort {public int Randomized_Select(int[] A, int p, int r, int i) {if (p == r)return A[p];int q = Randomize_Partition(A, p, r);int k = q - p + 1;if (i == k)return A[q];else if (i < k)return Randomized_Select(A, p, q - 1, i);elsereturn Randomized_Select(A, q + 1, r, i - k); } public int Randomize_Partition(int[] A, int p, int r) { Random rd = new Random();int i = rd.Next(p, r);int temp; temp = A[r]; A[r] = A[i]; A[i] = temp;return Partition(A, p, r); } public int Partition(int[] A, int p, int r) {int x = A[r];int i = p - 1;for (int j = p; j <= r - 1; j++) {if (A[j] <= x) { i += 1;int temp; temp = A[i]; A[i] = A[j]; A[j] = temp; } }int temp2; temp2 = A[i + 1]; A[i + 1] = A[r]; A[r] = temp2;return i + 1; } }}
转载于:https://www.cnblogs.com/ision/archive/2008/11/05/1327313.html
从N个元素中选择第i小的元素相关推荐
- 行内元素中的非替换行内元素和替换行内元素
今天看<别具光芒css>发现了以前未见过的词,替换的行内元素和非替换的行内元素. 替换的行内元素具有"内在尺寸",尺寸是有自身决定的,而不会受周围 ...
- 分治法 第3关:找出数组中第 k 个小的元素
任务描述 本关任务:对于给定的 n 个元素的数组a[0:n-1],要求从中找出第 k 小的元素. 编程要求 请在右侧编辑器Begin-End处补充代码,完成本关任务,注意需要学生自己获取输入数据再进行 ...
- 如何在jQuery的SELECT元素中选择特定选项?
如果您知道索引,值或文本. 另外,如果您没有直接参考的ID. 这 , 这和这都是有用的答案. 标记示例 <div class="selDiv"><select c ...
- Python从序列中选择k个不重复元素
昨天的文章中有个错别字,开头第一句"颜色"应为"演示",抱歉抱歉. Python操作高版本Excel文件:颜色.边框.合并单元格 集合中的元素不允许重复,Pyt ...
- 若在矩阵A中存在一个元素Aij,该元素是第i行元素中最大值并且又是第j列元素中最小值,则称此元素值为该元素的一个鞍点。假设以二维数组存储矩阵A,求该矩阵中的所有鞍点。
#include <stdio.h> #include <stdlib.h> int main() { int nh,nl,max,p,top=0;//max存储该行的 ...
- 【算法30】从数组中选择k组长度为m的子数组,要求其和最小
原题链接:codeforce 267 Div2 C 问题描述: 给定长度为n的数组a[],从中选择k个长度为m的子数组,要求和最大. 形式描述为:选择$k$个子数组[$l_1$, $r_1$], [$ ...
- java中选择排序和冒泡排序_Java选择排序就是比冒泡排序牛「具体详情,请看此文」...
什么是选择排序 选择排序原理即是,遍历元素找到一个最小(或最大)的元素,把它放在第一个位置,然后再在剩余元素中找到最小(或最大)的元素,把它放在第二个位置,依次下去,完成排序. 时间复杂度 选择排序的 ...
- php选择符和举例子,关于CSS3中选择符的实例详解
英文原文: www.456bereastreet.com/archive/200601/css_3_selectors_explained/ 中文翻译: www.dudo.org/article.as ...
- 在数组中查找第k个最大元素_查找数组中每个元素的最近最大邻居
在数组中查找第k个最大元素 Problem statement: 问题陈述: Given an array of elements, find the nearest (on the right) g ...
最新文章
- Windows安全软件长臂管辖的折中方案?
- c语言中穷竭算法,hihocoder#1054 : 滑动解锁(深度优先搜索)
- 一般拦截器 serviceImpl部分
- MapTask、ReduceTask并行度决定机制
- java calendar 毫秒_java Calendar(将时间精确到毫秒)
- 编辑距离 在输入检测中的应用
- Web 前端的路该怎么走?
- 通过IP获取相应所在地的地址
- html5高仿mac桌面,WinDynamicDesktop(高仿macOS动态壁纸)
- 我的Delphi开发经验谈(本人修改版) 收藏
- 初学者CAD画矩形如何定义尺寸?
- 如何快速抠图?图片怎样去底色变透明?
- gentoo linux 分区_开始使用gentoo linux——gentoo安装笔记(上)
- 在Mac上安装和配置Tunnelblick工具
- 童年的精彩(70年代~80年代初),以后的就不要看,会羡慕死你们的!^_^
- 4G套餐用户挺住了,运营商比你们急,会给优惠的低价流量
- 全国地区+邮编的数据库脚本
- anaconda3里pkgs可以删除吗,我试过conda clean -a,但用完之后还有10个G,吐血,C盘没空间了,pkgs删除影响虚拟环境吗,毕竟base大多数人用不到啊,求教
- 静态路由和动态路由详解
- IMS 注册流程最新
热门文章
- 分享memcache和memcached安装过程(转)
- Ubuntu 11.04 x64 下安装Python
- DEDECMS 5.6整合Discuz_X1.5的方法
- 将数组绑定到dropdownlist上
- jmeter聚个报告怎么看qps_【jmeter】jmeter测试网站QPS
- 镭波笔记本安装linux,镭波笔记本windows7旗舰版系统下载与安装教程
- 基于Matlab的循环码实验报告,基于MATLAB的循环码实验报告
- 获取后端接口请求中的参数(@PathVariable,@RequestParam,@RequestBody区别,使用postman请求
- 盘点9 个实用的 JSON 工具
- 收集一些常用的正则表达式