算法导论 第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

相关文章

Java获取当前时间String类型和Date类型方式

《Java获取当前时间String类型和Date类型方式》:本文主要介绍Java获取当前时间String类型和Date类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录Java获取当前时间String和Date类型String类型和Date类型输出结果总结Java获取

Python实现批量提取BLF文件时间戳

《Python实现批量提取BLF文件时间戳》BLF(BinaryLoggingFormat)作为Vector公司推出的CAN总线数据记录格式,被广泛用于存储车辆通信数据,本文将使用Python轻松提取... 目录一、为什么需要批量处理 BLF 文件二、核心代码解析:从文件遍历到数据导出1. 环境准备与依赖库

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

go中的时间处理过程

《go中的时间处理过程》:本文主要介绍go中的时间处理过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 获取当前时间2 获取当前时间戳3 获取当前时间的字符串格式4 相互转化4.1 时间戳转时间字符串 (int64 > string)4.2 时间字符串转时间

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

利用Python实现时间序列动量策略

《利用Python实现时间序列动量策略》时间序列动量策略作为量化交易领域中最为持久且被深入研究的策略类型之一,其核心理念相对简明:对于显示上升趋势的资产建立多头头寸,对于呈现下降趋势的资产建立空头头寸... 目录引言传统策略面临的风险管理挑战波动率调整机制:实现风险标准化策略实施的技术细节波动率调整的战略价

Python日期和时间完全指南与实战

《Python日期和时间完全指南与实战》在软件开发领域,‌日期时间处理‌是贯穿系统设计全生命周期的重要基础能力,本文将深入解析Python日期时间的‌七大核心模块‌,通过‌企业级代码案例‌揭示最佳实践... 目录一、背景与核心价值二、核心模块详解与实战2.1 datetime模块四剑客2.2 时区处理黄金法