`
cshopping829
  • 浏览: 3360 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

在一堆未排序的的数组中找第x大数

 
阅读更多

 

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

void exchange(int *pArray, int l, int r)

{

int tmp;

tmp=pArray[l];

pArray[l] = pArray[r];

pArray[r]=tmp;

}

int position(int *pArray, int p, int r)

{

int x = pArray[r];

int j = p;

int i = j -1;

for(; j < r; j++)

{

if(pArray[j] <= x)

{

i++;

exchange(pArray, i, j);

}

}

exchange(pArray, i+1, r);

return i+1;

 

}

int  randomized_position(int *pArray, int p, int r)

{

if(p < r) 

{

srand(time(0));

int k = rand()%(r-p);

exchange(pArray, p+k, r);

int iter = position(pArray, p, r);

return iter;

}

else

{

return 0;

}

}

int randomized_select(int *pArray, int p, int r, int i)

{

if(p == r)

{

return pArray[p];

}

int k = position(pArray, p, r);

int q = k - p +1;

if(q == i)

{

return pArray[k];

}

if(q < i)

{

randomized_select(pArray,k+1,r,i-k);

}

else

{

randomized_select(pArray, p, k-1, i);

}

}

 

分享到:
评论

相关推荐

    求有N个元素的数组中前k个最大的数?(N>=k)(python实现)

    具体思路为:第一次先遍历数组找到最大的数,第二次遍历从剩下的数组中找到最大的数(在整个数组中第二大的数)…共需遍历k次,这种方法的时间复杂度为O(N*k) 方法三:综合法 该方法思路是: (1)维护一个大小为k的...

    基于Python实现扑克牌面试题

    根据桌上的牌堆顺序,输出原先手中牌堆的顺序数组。 实现思路: 1、首先定义一个2维数组,代表最后桌上的牌堆排列情况。内部数组flist[i][0], flist[i][1]分别表示牌堆的排序和牌面的序号。 2、分n为奇数或偶数2种...

    约瑟夫环leetcode-leetcode-everyday:leetcode-每天

    约瑟夫环 leetcode leetcode 每日一题 8 字符串转换整数 (atoi) 42 接雨水 289 生命游戏(未操作表示状态) ...圆圈中最后剩下的数字 ...第一个只出现一次的字符 ...(使用LinkedList实现栈),一个栈用来push,...在排序数组中查

    你必须知道的495个C语言问题

    1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 声明问题 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 *1.26 main的正确定义是什么...

    《你必须知道的495个C语言问题》

    1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 13 声明问题 14 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 14 *1.26 main的正确...

    ACM巨全模板 .pdf

    5.主席树(静态求区间第k小) (区间中小于k的数量和小于k的总和) (区间中第一个大于或等于k的值) 6.权值线段树 (求逆序对) 7.动态主席树 (主席树+树状数组) (区间第k大带修改) 8.树上启发式合并 (查询子树的优化) 9,...

    剪绳子leetcode-python-challenges:用Python编程语言编写的编程挑战

    建造一堆立方体 () 提取域名 () 什么世纪 () 三角形数 () 求和数组 () 频率排序 () 退格 () 割绳子 () 对零件求和 () 删除括号 () 金字塔阵列 () 最常出现的日子 () 消息验证器 () 斐波那契 () 链表长度和计数 () ...

    最新JAVA编程题全集_50题及答案

    写一个函数,例如:给你的 a b c 则输出 abc acb bac bca cab cba import java.util.ArrayList; import java.util.List; public class NumTest { public static void main(String[] args) { String s="ABCD";...

    ACM 算法模板集

    一. 常用函数与STL 二. 重要公式与定理 1. Fibonacci Number 2. Lucas Number 3. Catalan Number 4. Stirling Number(Second Kind) 5. Bell Number 6. Stirling's Approximation 7. Sum of Reciprocal Approximation...

    浙江大学ACM模板 计算几何,图论,数据结构,经典题的模板

    1.16.6 存不存在一个平面把两堆点分开(poj3643) 66 1.16.7 pku_3335_判断多边形的核是否存在 67 1.16.8 pku_2600_二分+圆的参数方程 74 1.16.9 pku_1151_矩形相交的面积 76 1.16.10 pku_1118_共线最多的点的个数 78 ...

    kuangbin acm模板超级好用

    2.6 随机素数测试和大数分解 (POJ 1811) . . . . . . . . . . . . . . . . . . . . . . . 29 2.7 欧拉函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.7.1 分解质因素求...

Global site tag (gtag.js) - Google Analytics