语言-randomized select 算法工作错误

问题描述

randomized select 算法工作错误

算法导论算法,来实现查找第 i 小的数,不能正常工作

 #include<stdio.h>
#include<stdlib.h>
#include<time.h>

int randomized_select(int *arr, int start, int end, const int i);
//int pivot;
int main()
{
    int a[10] = {1, 9, 4, 3, 8, 2, 5, 6, 10, 7};
    //printf("%d", randomized_select(a, 0, 9, 2) );
    int num = randomized_select(a, 0, 9, 2);
    return 0;
}

/*
* 返回数组 arr 下标 start 至 end 中第 i小的元素
*/
int randomized_select(int *arr, int start, int end, int i)
{
    if(start == end)
    {
        return arr[start];
    }
    srand( ( unsigned )time(NULL) );
    int pivot = start + rand() % (end - start);
    //int pivot = rand() % (end - start + 1 ) + start; // 主元
    int k = pivot - start + 1;

    if(i == k) // the pivot value is the answer.
    {
        return arr[pivot];
    }

    else if(i < k)
    {
        return randomized_select(arr, start, pivot - 1, i);
    }

    else//(i >= k)
    {
        return randomized_select(arr, pivot + 1 , end, i - k);
    }
}

解决方案

http://www.cnblogs.com/sun/archive/2008/07/10/1239999.html

解决方案二:

http://blog.csdn.net/mishifangxiangdefeng/article/details/7687733

http://www.cnblogs.com/hibernate6/archive/2011/05/19/2522294.html

http://www.cnblogs.com/weixliu/archive/2012/12/23/2830199.html

希望对你有用!!!

时间: 2024-09-07 06:16:55

语言-randomized select 算法工作错误的相关文章

C语言实现排序算法之归并排序详解_C 语言

排序算法中的归并排序(Merge Sort)是利用"归并"技术来进行排序.归并是指将若干个已排序的子文件合并成一个有序的文件. 一.实现原理: 1.算法基本思路 设两个有序的子文件(相当于输入堆)放在同一向量中相邻的位置上:R[low..m],R[m+1..high],先将它们合并到一个局部的暂存向量R1(相当于输出堆)中,待合并完成后将R1复制回R[low..high]中. (1)合并过程 合并过程中,设置i,j和p三个指针,其初值分别指向这三个记录区的起始位置.合并时依次比较R[i

C语言 奇偶排序算法详解及实例代码_C 语言

C语言奇偶排序算法 奇偶排序,或奇偶换位排序,或砖排序,是一种相对简单的排序算法,最初发明用于有本地互连的并行计算.这是与冒泡排序特点类似的一种比较排序.该算法中,通过比较数组中相邻的(奇-偶)位置数字对,如果该奇偶对是错误的顺序(第一个大于第二个),则交换.下一步重复该操作,但针对所有的(偶-奇)位置数字对.如此交替进行下去. 使用奇偶排序法对一列随机数字进行排序的过程 处理器数组的排序 在并行计算排序中,每个处理器对应处理一个值,并仅有与左右邻居的本地互连.所有处理器可同时与邻居进行比较.交

win7系统显示“已停止工作”错误提示该怎么办

  Win7系统稳定.使用.人性化的特点深受广大用户的喜爱,但是在操作win7系统过程还是会遇到这样或那样的小问题无法解决.最近有用户反映运行win7系统频繁出现"已停止工作"错误提示,导致一些软件无法正常操作运行.检测也并非病毒侵略所导致的,为什么会出现此类情况呢?下面小编为大家介绍详细的解决方法! 1.卸载或关闭杀毒以及优化软件,卸载最近以来更新过的体系补丁,接着就装置回官方驱动. 2.把UAC用户控制关闭,鼠标右键点击计算机进入管理,依次选中以下选项"本地用户和组.用户

怎样解决Win7系统“com surrogate已停止工作”错误提示

我们在操作电脑的时候难免会遇到故障提示窗口,特别是在win7操作系统,经常弹出错误窗口让我们很是反感,但我们可以通过错误提示窗口来找出问题所在,才能更好的解决故障问题.最近有用户在win7系统中只是莫名其妙的自动弹出"com surrogate已停止工作,出现了一个问题,导致程序停止正常工作.请关闭该程序".相信很多用户遇到这种故障现象也不知道该如何处理,下面小编与大家共享下"com surrogate已停止工作"解决方法. 1.鼠标右击电脑桌面的"计算机

想要深入学习编程,求推荐语言-目的是算法实现和数据分析

问题描述 想要深入学习编程,求推荐语言-目的是算法实现和数据分析 目前懂得Python, Vb.Net, R的基本知识,并稍微懂得一些C# 实验室大概要向数据处理方面靠一靠,主要涉及的是地理数据库(关系数据库) 最基本需要是实现功能,例如spatial data clusering啊,定制的决策树啊一类的,也有可能涉及到批处理和其他的底层地理数据库处理. 以后可能有一定图形界面的需求. 我应该主要深入学习哪一门语言比较合适我的需求? 或者有什么其他的语言推荐吗 解决方案 推荐python,现在p

c语言-关于C语言排序起泡算法的问题

问题描述 关于C语言排序起泡算法的问题 #include void main() { int a, b, c, d; int x[9]; for (a = 1; a<=10;a++) { scanf_s("%d", &x[a]); } for (b = 1; b<=100; b++) { for (c = 0; c < 10-a; c++) { if (x[c+1] < x[c]) { d = x[c]; x[c] = x[c+1]; x[c+1] =

c语言-[C语言]求一个算法,输入N个数,输出所有其中任意M个数相加等于定值S的结果

问题描述 [C语言]求一个算法,输入N个数,输出所有其中任意M个数相加等于定值S的结果 如题,比如输入1,,2,10,5,7,8,9,11,输出其中任意几个数相加等于12的结果(不重复), 不自身相加. 1+2+9=12 10+2=12 7+5=12 解决方案 这题如果不考虑优化问题--轮询吧--总共有2的n次方种组合-学过排列组合的都知道

c语言-C语言求素数算法,有几种方法可以降低时间复杂度

问题描述 C语言求素数算法,有几种方法可以降低时间复杂度 b可以非常大的时候,输出a到b之间素数的个数,怎么才能简化算法,降低运行时间 解决方案 采用列表法,每次找到新的素数,添加到表中.每次寻找素数,不用每个数字都尝试一次,而只要尝试小于这个数字的1/2的所有素数就可以了. 解决方案二: 具体做法 http://blog.csdn.net/liukehua123/article/details/5482854 解决方案三: 不需要b的1/2,只需要判断到b的根号2 解决方案四: http://

c语言的高精度算法提问

问题描述 c语言的高精度算法提问 谁能简单说一下高精度算法是怎么意思!谁能简单说一下高精度算法是怎么意思!谁能简单说一下高精度算法是怎么意思!谁能简单说一下高精度算法是怎么意思! 解决方案 C语言 高精度算法 解决方案二: 要高精度的算法可以嵌套汇编对于时间控制或是对于单片机开发常用的 解决方案三: 解决方案四: 高精度算法通常是指大整数的加减乘除取模以及乘方运算.主要的思想就是将一个大数储存在数组内(每一个元素一位). 例如8382可以表示为 int a[] = {2,8,3,8} (倒存为了