算法导论 第2版 9.2 线性时间做选择

2024-06-22 06:48

本文主要是介绍算法导论 第2版 9.2 线性时间做选择,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

以书上伪代码为模板编写

#include<iostream>
using namespace std;
int A[11] = {-1,4,1,8,3,10,2,5,6,9,7};//下标从1开始,因此A[0]不用,用-1标记int partition(int *A, int p, int r)//划分函数
{int x = A[r];int i = p-1;int temp;for(int j = p; j<=r-1; j++){if(A[j] <= x){i++;temp = A[i];A[i] = A[j];A[j] = temp;}}temp = A[i+1];A[i+1] = A[r];A[r] = temp;return i+1;
}int randomized_partition(int *A, int p, int r)//从A[p]~A[r]中随机选择pivot
{int temp;int i = rand()%(r-p) + p;//生成p到r之间的随机数//原理:对于任意整数r,p有:0 <= rand()%(r-p+1) <= r-p//于是:0+p <= rand()%(r-p+1)+p <= r-p+p//即:p <= rand()%(r-p+1)+p <= rtemp = A[r];A[r] = A[i];A[i] = temp;return partition(A, p, r);//调用划分函数
}int randomized_select(int *A, int p,int r, int i)
{if(p == r)return A[p];int q = randomized_partition(A, p, r);//随机划分,q为pivot int k = q-p+1;//计算包括A[q]在内的左半边长度 if(i == k)//A[q]左边的元素都比它小,因此A[q]是第q-p+1(即k)小的元素 return A[q];else if(i < k) return randomized_select(A, p, q-1, i);//i<k时,找A[p...q-1]中第i小 elsereturn randomized_select(A, q+1, r, i-k);//i>k时,找A[q+1...r中第i-k小 
} int main()
{int i = randomized_select(A, 1, 10, 6);cout<<i;
}

main中调用randomized_select,选出A(1,2,3,4,5,6,7,8,9,10)中第6小的数
输出为6,符合要求.

这篇关于算法导论 第2版 9.2 线性时间做选择的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1083581

相关文章

前端知识点之Javascript选择输入框confirm用法

《前端知识点之Javascript选择输入框confirm用法》:本文主要介绍JavaScript中的confirm方法的基本用法、功能特点、注意事项及常见用途,文中通过代码介绍的非常详细,对大家... 目录1. 基本用法2. 功能特点①阻塞行为:confirm 对话框会阻塞脚本的执行,直到用户作出选择。②

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1

如何利用Java获取当天的开始和结束时间

《如何利用Java获取当天的开始和结束时间》:本文主要介绍如何使用Java8的LocalDate和LocalDateTime类获取指定日期的开始和结束时间,展示了如何通过这些类进行日期和时间的处... 目录前言1. Java日期时间API概述2. 获取当天的开始和结束时间代码解析运行结果3. 总结前言在J

修改若依框架Token的过期时间问题

《修改若依框架Token的过期时间问题》本文介绍了如何修改若依框架中Token的过期时间,通过修改`application.yml`文件中的配置来实现,默认单位为分钟,希望此经验对大家有所帮助,也欢迎... 目录修改若依框架Token的过期时间修改Token的过期时间关闭Token的过期时js间总结修改若依

Go Mongox轻松实现MongoDB的时间字段自动填充

《GoMongox轻松实现MongoDB的时间字段自动填充》这篇文章主要为大家详细介绍了Go语言如何使用mongox库,在插入和更新数据时自动填充时间字段,从而提升开发效率并减少重复代码,需要的可以... 目录前言时间字段填充规则Mongox 的安装使用 Mongox 进行插入操作使用 Mongox 进行更

对postgresql日期和时间的比较

《对postgresql日期和时间的比较》文章介绍了在数据库中处理日期和时间类型时的一些注意事项,包括如何将字符串转换为日期或时间类型,以及在比较时自动转换的情况,作者建议在使用数据库时,根据具体情况... 目录PostgreSQL日期和时间比较DB里保存到时分秒,需要和年月日比较db里存储date或者ti

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

Python 中 requests 与 aiohttp 在实际项目中的选择策略详解

《Python中requests与aiohttp在实际项目中的选择策略详解》本文主要介绍了Python爬虫开发中常用的两个库requests和aiohttp的使用方法及其区别,通过实际项目案... 目录一、requests 库二、aiohttp 库三、requests 和 aiohttp 的比较四、requ

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g