选择第i个数

 1 void swap(int &i, int &j)
 2 {
 3     int temp = i;
 4     i = j;
 5     j = temp;
 6 }
 7
 8 int partition(int a[], int p, int r)
 9 {
10     int x = a[r];
11     int i = p - 1;
12     for (int j = p; j < r; j++) {
13         if (a[j] <= x) {
14             i ++;
15             swap(a[i], a[j]);
16         }
17     }
18     i ++;
19     swap(a[i], a[r]);
20     return i;
21 }
22
23 int select(int a[], int p, int r, int i) {
24     int q = partition(a, p, r);
25     int k = q - p;
26     if (k == i) {
27         return a[q];
28     } else if (k > i) {
29         return select(a, p, q - 1, i);
30     } else {
31         return select(a, q + 1, r, i - k - 1);
32     }
33 }

原文地址:https://www.cnblogs.com/ren-yu/p/11966306.html

时间: 2024-08-30 04:46:51

选择第i个数的相关文章

选择 reducer 的个数

默认情况下,一个 mapreduce job 只有一个 reducer ,真实应用中,作业都把它设置成一个较大的数字,否则由于所有的中间数据都会放到一个 reducer 任务中,造成性能瓶颈. reducer 最优个数与集群中可用的 reducer 任务槽数相关.总槽数由集群中节点数与每个节点的任务数相乘得到.每个节点的任务槽数由 mapred.tasktracker.reduce.tasks.maximum 属性的值决定,默认为 2 . 常用的方法是设置的 reducer 数比总槽数稍微少一些

等概率无重复的从n个数中选取m个数

问题描述:程序的输入包含两个整数m和n,其中m<n.输出是0~n-1范围内的m个随机整数,要求:每个数选择出现的概率相等,且按序输出. 学习过概率统计的同学应该都知道每一个数字被抽取的概率都应该为m/n. 那么我们怎么构造出这样的概率呢?在<编程珠玑>上面是这样解析的: 依次考虑整数0,1,2,.....,n-1,并通过一个适当的随机测试对每个整数进行选择.通过按序访问整数,我们可以保证输出结果是有序的. 假如我们考虑m = 2,n = 5的情况,那么选择的每一个数字的概率都应该是2/5

HDFS副本选择策略

在client向DataNode写入block之前,会与NameNode有一次通信,由NameNode来选择指定数目的DataNode来存放副本.具体的副本选择策略在BlockPlacementPolicy接口中,其子类实现是BlockPlacementPolicyDefault.该类中会有多个chooseTarget()方法重载,但最终调用了下面的方法: 1 /** 2 * This is not part of the public API but is used by the unit t

选择问题(selection problem)

/* 本文是选择问题: 选择一组N个数当中的第k小的数(第k大的数类似)     集中方法的实现代码 */ #include "sorting.h" #include "fatal.h" #define SORTING_BUBBLE  1 #define SORTING_INSERTION   2 #define SORTING_SELECTION   3 #define SORTING_SHELL       4 #define SORTING_QUICK    

[ACM] POJ 3252 Round Numbers (一个区间内二进制中0的个数大于等于1的个数有多少个,组合)

Round Numbers Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8590   Accepted: 3003 Description The cows, as you know, have no fingers or thumbs and thus are unable to play Scissors, Paper, Stone' (also known as 'Rock, Paper, Scissors',

滤波电容的选择

本文源自:http://www.znczz.com/thread-123986-1-1.html 经过整流桥以后的是脉动直流,波动范围很大.后面一般用大小两个电容 大电容用来稳定输出,众所周知电容两端电压不能突变,因此可以使输出平滑 小电容是用来滤除高频干扰的,使输出电压纯净 电容越小,谐振频率越高,可滤除的干扰频率越高 容量选择: (1)大电容,负载越重,吸收电流的能力越强,这个大电容的容量就要越大 (2)小电容,凭经验,一般104即可 2.别人的经验(来自互联网) 1.电容对地滤波,需要一个

6.选择排序

package day04; public class ShuZu_XuanZePaiXu_04 { /** 选择排序(第一个数挨个跟后面的数比较) 内循环结束一次,最值出现在头角标位置上 */ public static void main(String[] args) { // TODO Auto-generated method stub int []arr={3,1,4,2,7,5}; selectSort(arr); printArray(arr); } //按从小到大排列 publi

如何从一堆数中选出若干个数,使其和等于给定的数?

如题,比如有一堆数:13,2,4,2,4,8,7,8,6 要从中挑选出若干个数,使得它们的和等于32,挑选出来的数是:20,6,4,2 我是使用“试探”法来解这个题目,思路如下: 先对数进行排序:13,8,8,7,6,4,4,2,2 选出最大的数字,以及不大于目标数字后续数字,于是我挑选到了13,8,8,其和是29,如果这个时候再挑选7的话就会超过32,所以就跳过,尝试在后面找到合适的数字,找到4,加上仍然大于32,再接着找到2,这次好了,加起来是31. 再次向后面寻找小的数字的时候,发现没有合

oracle 函数 NVL2...NVL

NVL2(expr1,expr2,expr3) : 记忆,nvl2(),expr1为null ,2表示 选择第2个数(即expr3)返回 功能:如果参数表达式expr1值为NULL,则NVL2()函数返回参数表达式expr3的值:如果参数表达式expr1值不为NULL,则NVL2()函数返回参数表达式expr2的值. NVL( string1, replace_with) 功能:如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值,如果两个参数都