Perl 堆排序

C++ STL核心组件实战指南:从容器算法到性能优化 在C++编程中,数据结构和算法是构建高效软件的基础。标准模板库(STL)通过泛型编程思想,将常用的数据结构和算法封装为可复用的组件,其核心价值在于提升开发效率、保证代码健壮性并优化程序性能。STL包含四大组件:容器负责数据存储组织,算法提供通用操作,迭代器作为两者间的统一接口,函数对象则赋予算法灵活性。例如,vector作为动态数组,凭借其连续内存布局和快速随机访问特性,成为序列容器的默认选择;而map和unordered_map则分别基于红黑树和哈希表实现,为键值对存储与快速查找提供了高效解决方案。掌握S 阅读详情

看了算法导论堆排序,用Perl 实现一下,具体原理不解释,做个记录。


代码:

@a = map {int(rand 100)} 1..20;

sub build_heap{
     my $length = $#_;
     for(my $i = $length>>1; $i >= 0; $i--){
          heapnify(\@_, $length, $i);
     }
}

sub heapnify{
     #~ $x++; #use it to trace how much times the procedure was run
     my ($array, $length, $index) = @_;
    
     my $max = $array->[$index];
     my $tmp = $index;
     my $left = left($index);
     my $right = right($index);
    
     if($left <= $length && $array->[$left] > $max){
          $max = $array->[$left];
          $tmp = $left;
     }
     if($right <= $length && $array->[$right] > $max){
          $max = $array->[$right];
          $tmp = $right;
     }
    
     if($tmp != $index){
          ($array->[$index], $array->[$tmp]) = ($array->[$tmp], $array->[$index]);
          heapnify($array, $length, $tmp) if $tmp <= $length>>1;
     }
}

sub left      { ($_[0]<<1) + 1 }
sub right     { left(@_) + 1 }

sub max_heap{
     build_heap(@_);
     @_[0,-1] = @_[-1,0];
     for(my $i=$#_-1;$i>0;$i--){
          heapnify(\@_,$i,0);
          @_[0,$i] = @_[$i,0];
     }
}

max_heap(@a);
print "@a\n";


Perl 腾讯股票信息收集 之前的新浪股票脚本信息不太全,参考前面一篇文章腾讯股票接口,写了一个更加方便的,信息比较全的。看代码: use utf8; use Encode; use strict; use warnings; use LWP::UserAgent; use threads (exit => 'threads_only',); use threads::shared; use constant UR 阅读详情

相关推荐

Perl 新浪股票信息收集

通过解析SINA HTTP 返回的数据获取股票信息,具体返回值参考文章实时股票数据接口大全。 使用说明: perl script.pl [-c -f] -d 获取默认@defaultstock列表中股票信息,参数-c 清屏,参数-f 输出更加完整的信息,参考图例 perl script.pl -m [sh sz zx cy] 四个参数分别代表获取上海,深圳,中小,创业板股票的信息

USTBHacker的专栏 7612

Perl学习(十三)——数组操作总结 push pop shift unshift

Perl学习(十二)——数组操作总结 push pop shift unshift Perl对数组的操作有push、pop、shift、unshift。 push和pop操作的是数组的尾部。shift和unshift操作的是数组的头部。 push和unshift是添加操作,pop和shift是删除操作。 下面是一个例子程序,展示了如何使用这些函数: #!/usr/bin/perl -w

archer的技术故事 3320

Perl 判断一个字符串中所有字符是否在另外一个字符串中出现

在酷壳 – CoolShell.cn 中看到一个文章,判断一个字符串中的所有字符是否在另外一个字符串中出现,如果用循环的话时间复杂度是O(mxn),如果使用先排序后判断时间复杂度是O(mlgm)+O(nlgn)+O(m),作者面试的时候考官给出的一个思路是每个字符给一个素数,所有的树相乘,再用这个数去除另外一个字串中字符对应的数,余数为0的话则包含在第一个字串中,时间复杂度为O(m+n),思考了以

USTBHacker的专栏 5062

PERL算法-加入子程序的堆排序

1、引入模块(有些模块是没有必要的),单线程。 数据格式:chr gene|exon|introns begin end 类型的数据。 大根堆调整算法。 这里$code() 等价了右孩子与左孩子的比对。 小根堆调整算法只需要将$code() > 0 和$code >= 0 替换为 $code 小根堆调整算法 堆排序

Hiker的专栏 388

《Ventoy 制作系统安装 U 盘的具体步骤》

然后您可以在电脑的磁盘管理中对 U 盘进行快速格式化,选择 FAT32 或 NTFS 文件系统。至此,Ventoy 系统安装 U 盘就制作完成了。您可以在需要安装系统的电脑上,从 U 盘启动,然后选择相应的系统镜像进行安装。安装完成后,将您需要的操作系统镜像文件(如 Windows、Linux 等的 ISO 格式镜像)复制到 U 盘的根目录。在安装程序中,选择您插入的 U 盘设备,确保选择正确,以免误操作。2. 确认选择的 U 盘盘符正确,防止误操作导致其他磁盘数据丢失。点击“安装”按钮,等待安装完成。

jiyiwangluokeji的博客 2666

华东师范大学2020机试题解

1.统计卡牌的值 #include<iostream> #include<string> #include<vector> //#include<algorithm> using namespace std; int main() { int n; cin>>n; int answer=0; for(int i=0;i<n;++i) { string str; ci

qq_42254342的博客 1901

perl 实现的基本排序算法

 #! /usr/bin/perl -wuse strict;use POSIX;use Data::Dumper;my @data = &generate_rand( 100  );#(3, 5,4, 43,990, 43,54, 2, 7, 45);#print Insert_sort(/@data);#&Selection_sort(/@data);#&merge_sort ( /@

xuan_oscar的专栏 1355

别再死记硬背了!用‘小乌龟’实战图解ROS1核心指令(rosnode/rostopic/rosparam保姆级手册)

本文通过经典的turtlesim乌龟仿真器,以可视化实战方式讲解ROS1核心指令(rosnode/rostopic/rosparam),帮助初学者摆脱死记硬背,在操控乌龟的过程中轻松掌握节点管理、话题通信和参数设置等ROS1核心概念。

weixin_28731223的博客 370

Perl语言的排序算法

排序算法的主要目的是将数据集按照特定的顺序排列,通常是升序或降序。排序的效率和复杂度是评价排序算法好坏的重要指标。冒泡排序(Bubble Sort)选择排序(Selection Sort)插入排序(Insertion Sort)快速排序(Quick Sort)归并排序(Merge Sort)堆排序(Heap Sort)在Perl中实现这些算法非常简便,成为学习和理解排序算法的理想语言。下面是一个简单的例子,展示如何使用自定义块对数字进行升序和降序排序:```perl# 升序排序。

2501_91195938的博客 414

小新学习K8s第一天之K8s基础概念

kubernetes是一个可移植,可扩展的开源平台,用于管理容器化工作负载和服务,有助于声明式配置和自动化。它拥有庞大且快速发展的生态系统。kubernetes服务,支持和工具随处可见。作用:用于自动部署,扩展和管理“容器化应用程序”的开源系统。可以理解成k8s是负责自动化运维管理多个容器化程序(比如docker)的集群,是一个生态及其丰富的容器编排框架工具。

pangdongqiqi的博客 1228

终于找到了!Ubuntu 虚拟机卡死的终极解决方案(如何解决VMware安装Ubuntu24.04桌面进不去、黑屏、虚拟机卡死、显示不全、屏幕闪烁等问题)

终于找到了!Ubuntu 虚拟机卡死的终极解决方案(如何解决VMware安装Ubuntu24.04桌面进不去、黑屏、虚拟机卡死、显示不全、屏幕闪烁等问题)

XiaoqiangClub的博客 1万+

快速排序算法多种语言实现

快速排序是一种排序算法,由东尼·霍尔所发展的,以平均性能来说,排序n个项目要Θ(nlogn)次比较。然而,在最坏的性能下,它需要Θ(n2)次比较。一般来说,快速排序实际上明显地比其他Θ(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来,且在大部分真实世界的数据,可以决定设计的选择,减少所需时间的二次方项之可能性。 ...

anxiangfei5381的博客 230

079、LVGL基础控件:消息框(Msgbox)

《LVGL消息框控件深度解析与避坑指南》 文章深入剖析了LVGL消息框控件的核心特性和使用技巧。消息框本质是带按钮的模态容器,而非独立窗口。作者分享了创建消息框的正确姿势、标题/内容设置方法、安全的按钮事件处理方式(避免直接调用close函数导致栈溢出),并详细介绍了模态/非模态实现、样式自定义、动态更新等实用技巧。针对常见问题如内存管理、按钮数量限制、动画效果等给出了专业建议,特别强调了消息框作为用户交互关键环节的优化重要性,建议通过异步删除、合理父对象选择等方式提升稳定性。文章包含大量实际项目经验总结,

m0_50546716的博客 153

十大编程算法助程序员走上高手之路

算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。 快速排序使用分治法(Divide and conquer)策...

iteye_9954的博客 3790

使用 MATLAB/Simulink 构建一个 核电站汽轮机与发电机协调控制系统 的仿真模型

在核电机组中,汽轮机-发电机系统是将核能最终转化为电能的关键环节。与火电机组不同,核反应堆的热惯性大、功率调节慢,因此汽轮机的控制策略需与反应堆特性相匹配,实现安全、稳定、高效的能量转换。维持发电机输出功率/频率稳定(响应电网调度)调节汽轮机进汽压力(匹配一回路蒸汽供应)实现“堆-机协调控制”保障机组在启停、变负荷、甩负荷等工况下的安全性本教程将带你使用构建一个核电站汽轮机与发电机协调控制系统汽轮机调速系统(调门控制)建模发电机与电网接口建模(同步机)

xiaoheshang_123的博客 188

【25届数字IC秋招总结】面试经验10——紫光同芯

25届数字ic面试记录——紫光同芯

lalala0635的博客 862

编程语言与排序算法

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33806509的博客 196

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

“祖传代码”:技术遗产的保护与现代化

在这里,你首次遇到了所谓的“祖传代码”——那是一段用古老Perl语言编写的登录验证模块,它的存在仿佛一位年迈的守护者,守护着系统的大门。除了具体的代码实例,祖传代码还体现在某些编程习惯上,比如使用全局变量来保存状态,或是那些令人费解的命名约定,它们如同古老的符咒,只有破解了它们背后的故事,你才能真正理解它们的意义。这其实是一个经典的冒泡排序算法,虽然在今天的视角看来效率较低,但在当时的硬件资源限制下,这样的算法足以应对日常的数据处理需求。在当今的加密标准看来,这简直是“祖级”的加密方法,安全性堪忧。

YF云飞的博客 484

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java算法排序之--选择排序

每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。 排序简介 排序算法即解决以下问题的算法: 输入:n个数的序列。 输出:原序列的一个重排;,使得a1* 排序算法有很多,包括插入排序,冒泡排序,堆排序,归并排序,选择排序,计数排序,基数排序,桶排序,快速排序等。插入排序,堆排序,选

sunny_sailor的专栏 733

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

选择排序

选择排序 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。 中文名 外文名 性质 代表 适用范围 方法 应用领域 ...

ahln8797的博客 177

冒泡排序和选择排序

     上一篇文章说了堆排序,既然说了排序,那当然要说一下冒泡排序,学排序算法第一个案例就是冒泡,冒泡排序的时间复杂度为O(n²),使用两层循环就可以搞定,不了解冒泡算法的同学很容易将它与选择排序混淆。        int [ ] data = {9,8,7,6,5,4,3,2,1};        冒泡算法:从第一个数开始,比较相邻的元素。如果第一个比第二个大,就交换他们两个。例如上面9...

Mr_Dai的博客 5565

MySQL 8 从零安装到基础操作:10分钟搞定开发环境搭建

最近在帮几个刚入行的朋友搭建开发环境,发现不少人对 MySQL 的安装配置过程感到头疼,网上教程要么版本过时,要么步骤跳得太快,遇到报错就无从下手。其实,只要理清步骤,10分钟完成 MySQL 8 的安装和基础使用是完全可行的。本文将从零开始,手把手带你完成 MySQL 8 的下载、安装、配置、连接和基础操作,并提供一套完整的排错清单。无论你是刚接触数据库的学生,还是需要快速搭建本地测试环境的开发者,都能跟着步骤一次成功。 1. 背景与核心概念 在开始动手之前,我们先快速了解一下 MySQL 8 是什么,以

weixin_30325487的博客 490

排序算法之冒泡排序

*排序算法目录 ** 冒泡排序(Bubble Sort) 选择排序(Selection Sort) 插入排序(Insertion Sort) 希尔排序(Shell Sort) 归并排序(Merge Sort) 快速排序(Quick Sort) 堆排序(Heap Sort) 鸽巢排序(Pigeonhole Sort) 冒泡排序: 冒泡排序是一种稳定排序,其实现逻辑比较简单直观,但是效率比较底下...

qq_45414436的博客 228

Go语言数组与切片深度解析

数组与切片是Go语言中最常用的数据结构。它们看似简单,但理解其底层原理对于写出高性能Go代码至关重要。本文参考了Go官方博客关于切片内部机制的文章(go.dev/blog/slices-intro)、Go语言规范以及社区最佳实践,深入剖析了数组与切片的底层实现、内存布局和性能特征。

星航夜空的帆舟 218

腾迅股票数据接口 http/javascript

之前使用了新浪的股票数据,由于新浪http/javascript缺少一些数据,用chrome自带的开发工具监视腾迅财经HTTP信息,得到以下获取股票数据的方法。 以五粮液为例,要获取最新行情,访问数据接口: http://qt.gtimg.cn/q=sz000858 返回数据: v_sz000858="51~五 粮 液~000858~27.78~27.60~27.70~41

USTBHacker的专栏 11万+

Perl lib path

Perl 中默认LIB路径有如下几个地方可以存储: Perl -V 中@INC变量,这是编译时绑定的系统环境变量PERL5LIB,如set PERL5LIB=D:/tmp 脚本中use lib 添加 所有的操作最后都是在系统变量@INC 中添加一个路径,按照先后顺序依次查找,默认的先后顺序是上边三类的倒序排列,看如下示例。 没有添加额外的路径的情况:(默认当前目录会添加到LIB

USTBHacker的专栏 6119
上一篇: Perl 判断一个字符串中所有字符是否在另外一个字符串中出现
下一篇: Perl 快排
Bai_Yuanyong
博客等级 码龄24年 46粉丝 53原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值