博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
频率法:数组排序的另一种思路
阅读量:5980 次
发布时间:2019-06-20

本文共 682 字,大约阅读时间需要 2 分钟。

通常要排序一个数组免不了要“比较”:比较arr[i]和arr[i+1]的大小关系并判断是否交换;这里我要介绍一种不通过比较数组元素来实现排序的新思路:频率法

为了突出频率法和普通方法的区别,我将贴出普通数组排序方法和频率法两者的代码,首先是普通方法(简单的选择排序,基于Java实现)

void sort(int[] arr){      for(int i=0; i
arr[j]){ int tmp=arr[i]; arr[i]=arr[j]; arr[j]=tmp; } } } }

很简单的代码,现在是见证奇迹的时刻——频率法不需要比较arr[i]和arr[i+1]:

void sort(int[] arr){      int[] frqs=new int[max(arr)+1];      for(int i=0; i

说明1:上述代码的max函数省略了,就是返回该数组的最大值

说明2:不同语言实现不同,但是思路是一样的;如Python在第二个for循环只需要一层,直接print i * frqs[i]

频率法的思路是:“占位”,即首先不管待排序数组有哪些数字,创建一个下标从0~max的数组用来存放这些数(以及这些数之间的数),用for循环遍历得到各个数字的出现频率,并把值存放在frqs数组中;巧妙之处在于,下标就是顺序,对应数组元素中存放的值就是出现次数

转载地址:http://fgoox.baihongyu.com/

你可能感兴趣的文章
vue中v-for循环如何将变量带入class的属性名中
查看>>
ceph学习笔记之七 数据平衡
查看>>
windows下的php的memcache扩展的安装及memcache最新下载地址
查看>>
YOLOv3: 训练自己的数据(绝对经典版本1)
查看>>
POJ 1150 The Last Non-zero Digit 《挑战程序设计竞赛》
查看>>
Could not find artifact com.sun:tools:jar:1.5.0 解决办法
查看>>
phpstorm xdebug remote配置
查看>>
引用与指针的区别
查看>>
pygtk笔记--2.1:布局容器,VBox、Hbox、Alignment
查看>>
dtree.js树的使用
查看>>
Springboot2.1.3 + redis 实现 cache序列化乱码问题
查看>>
python 异常处理
查看>>
线程什么时候需要同步,什么时候不需要同步?
查看>>
Struts2 自定义拦截器(方法拦截器)
查看>>
Linux服务器的那些性能参数指标
查看>>
BZOJ 2302: [HAOI2011]Problem c [DP 组合计数]
查看>>
Atitti 过程导向 vs 结果导向 attlax的策
查看>>
c++ 11开始语言本身和标准库支持并发编程
查看>>
.NET Core 之 MSBuild 介绍
查看>>
iOS:即时通讯之<了解篇 SocKet>
查看>>