这个算法怎么实现?

wkgenius 2005-12-10 10:36:24
找出数组中第k大小的数,输出数所在的位置(重复的计算个数)。
例如 {2,4,3,4,7}中,第一大的是7,输出位置4,第2,3大的都是4,位置1,3随便是哪一个。
本人知道用冒泡的方法冒k次就行了
有没有更快的?
...全文
119 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wendaojianxia 2005-12-11
  • 打赏
  • 举报
回复
找最大是将数组遍历一次就可以了,但要是找第5,6大呢(有100+个).
我觉得堆排序比较好.(但还是要看你取第几大数和有多少数)
wendaojianxia 2005-12-10
  • 打赏
  • 举报
回复
好像不对吧.
这要看你那个数组的大小和k值,比如有100个数,你要最大的,用冒泡只要遍历一次,取最后一个
就可以了.
但用快速等就要先把数组排好序,再取最后一个,这就慢很多了啊.
windindance 2005-12-10
  • 打赏
  • 举报
回复
这个算法复杂度应该可以降低到O(dn),其中d是第※大。
手上没有C++,用DELPHI写了一个:
function getIndex(a :array of integer; index:integer):integer;
var
i,j,k:integer;
n:array of integer; //保存当前第一大到第index大的索引
begin
SetLength(n,index);
for j:=0 to High(n) do
n[j] := 0;

for i:=1 to High(a) do
begin
for j:=0 to High(n) do
begin
if a[i]=a[n[j]] then
break;
if a[i] >a[n[j]] then
begin
for k:=High(n) downto j+1 do
n[k] := n[k-1];
n[j] := i;
break;
end;
end;
end;
result := n[index-1];
end;

调用:
getindex([2,4,3,4,7],1);//第一大
paul_1981 2005-12-10
  • 打赏
  • 举报
回复
快速排序 或 希尔排序比冒泡速度快很多哦^_^
vcmute 2005-12-10
  • 打赏
  • 举报
回复
qsort 快速排序
oyljerry 2005-12-10
  • 打赏
  • 举报
回复
QuickSort
yzhouen 2005-12-10
  • 打赏
  • 举报
回复
找最大的是特殊情况,实质上是找出最大数,这样根本就不要用什么排序算法,将数组遍历一次就可以了,如果想找出任意大的数所在的位置,还是应该快速排序较好

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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