请问谁有效率高一点的方法来求一个数组的十个最大值?

tresa 2003-10-16 10:35:04
我在做一个信号处理的程序,将采集的信号做完FFT变换之后存在一个数组里(下标表示频率,数组元素表示峰值),现在需要显示这个数组里的十个最大峰值和对应的频率,请问有没有高效率一点的方法呢?求源码!
...全文
171 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
tresa 2003-10-23
  • 打赏
  • 举报
回复
问题解决,散分!
bcghb 2003-10-21
  • 打赏
  • 举报
回复
TO:csntgao(小高)
"认识了斧子,就觉得所有的问题都是钉子!",哈哈哈!
谢谢你对我的评价,其实这也是解决问题的一种方式,我们不一定都要落俗套!
966126 2003-10-21
  • 打赏
  • 举报
回复
那不就是冒泡了,把前面十个冒出来就行了
tresa 2003-10-21
  • 打赏
  • 举报
回复
还是hiflower理解我,就是这个意思,你的方法看来不错,我马上试试。一解决就给分
tresa 2003-10-21
  • 打赏
  • 举报
回复
不好意思,还是原来的问题,频率是小数的问题我搞清楚怎么回事了,下标只是表示点数,还要换算才得频率。^_^,不好意思,语无伦次得这么多话。还望大家提供好建议!
tresa 2003-10-21
  • 打赏
  • 举报
回复
今天突然发现,我要求的频率还不仅仅是用下标表示的整数,我师兄给我出的题目原来是要求出一长串数字(信号FFT变换后的数)里的前十个最大值,而且要把这十个值对应的频率也记下来,而这十个频率值也有小数,有做过这方面开发的同志点播一下,好吗?
dancedog 2003-10-18
  • 打赏
  • 举报
回复
我想晕楼上。

排完序后取出前十个不就是楼主想要的结果吗??
halfdream 2003-10-18
  • 打赏
  • 举报
回复
使用一个链表什么的,最大单元为10,
读一个数组元素就往链表里面插入,大的排在前面,小的被‘挤’出链表。。
hiflower 2003-10-18
  • 打赏
  • 举报
回复
楼主的意思不是要排序吧,而是按原顺序的 10 个最大值吧
先保存前 10 个数据的下标,然后依次从后面的数据中取一个数,与前 10 个数比较,并用其下标替换前10 个数据的最小值的下标
sailer_shi 2003-10-18
  • 打赏
  • 举报
回复
你是不是取得一个值的时候就进行一次判断呀?
Linux2001 2003-10-18
  • 打赏
  • 举报
回复
区区十个元素,用冒泡排序都足够了,要是不爽,用二分查找,简单点的用一个数组只存放最大值,就是每次收取到数值和前一个最大值进行比较,如果大于前一个数值,放入数组(前提是你先得放满数组才行,不然会有可能到最后数组中只有一个元素的情况)
hmily1688 2003-10-16
  • 打赏
  • 举报
回复
如果找10个最大的(这话不对吧,最大的是一个,而你要找10个),晕!!!你们每一个人的答案都不对啊
csntgao 2003-10-16
  • 打赏
  • 举报
回复
47522341(睡到8:30) 是目前找到的最好方法,在发现有比max【10】更大的值;让该数值跟max【1】..max【9】进行重新排序可以找到更快的办法,但已经没有意义

yoic(我是一棵菠菜,菜,菜,菜,菜,菜,菜) 听说过一种排序的算法,以为天下的事情都是在排序!

dancedog(猪熔鸡) 学过数据结构,但没有学过使用自己的大脑!

bcghb 认识了斧子,就觉得所有的问题都是钉子!
bcghb 2003-10-16
  • 打赏
  • 举报
回复
把你数组里的值读到一张表里XTableName
然后,select top 10 from XTableName oder by XFieldName Desc
就可以了,简单吧!(哈哈)
dancedog 2003-10-16
  • 打赏
  • 举报
回复
快速排序法,最快的排序方法。
说明:对整形数组A进行排序

procedure QSort(var A: array of Integer);

procedure QuickSort(var A: array of Integer; iLo, iHi: Integer);
var
Lo, Hi, Mid, T: Integer;
begin
Lo := iLo;
Hi := iHi;
Mid := A[(Lo + Hi) div 2];
repeat
while A[Lo] < Mid do Inc(Lo);
while A[Hi] > Mid do Dec(Hi);
if Lo <= Hi then
begin
VisualSwap(A[Lo], A[Hi], Lo, Hi);
T := A[Lo];
A[Lo] := A[Hi];
A[Hi] := T;
Inc(Lo);
Dec(Hi);
end;
until Lo > Hi;
if Hi > iLo then QuickSort(A, iLo, Hi);
if Lo < iHi then QuickSort(A, Lo, iHi);
if Terminated then Exit;
end;

begin
QuickSort(A, Low(A), High(A));
end;
yoisyois 2003-10-16
  • 打赏
  • 举报
回复
可以用冒泡排序。
不知道冒泡排序的时间复杂度如何。

你试试看吧。
47522341 2003-10-16
  • 打赏
  • 举报
回复
楼主这个问题比较具有挑战性;呵呵;什么叫高效的;我觉得下面这种方法可以用;
定义一个数组max【10】用来存放10个最大值;其中max【1】最大;max【10】最小
用循环处理;在发现有比max【10】更大的值;让该数值跟max【1】..max【9】进行重新排序;

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧