使用简单的暴力算法找到数组中最大的4个元素

find the 4 biggest elements of an array by using a simple brute force algorithm

本文关键字:数组 4个 元素 简单 算法      更新时间:2023-10-16

我有一个数组(myDb(,其中包含歌曲及其持续时间。我需要用蛮力算法找到持续时间最长的4首歌,但我太愚蠢了,无法做到这一点。首先,我绕了一圈,找到了我最长的歌曲,如下(作品(:

CTitle tmp=*myDb.getTitle(0);
for (int i=0; i<=myDb.getNumberofTitles;i++)
{
if (tmp.getDuration()<myDb.getTitle(i+1)->getDuration())
{
tmp=*myDb.getTitle(i+1)
}
}

所以这是有效的,我把我最长的曲目保存为我的临时对象。现在,我必须在myDb中搜索一个具有此持续时间的标题,并将其添加到我的"播放列表"(CTitles数组(中。然后,我必须将持续时间(整数,以秒为单位表示曲目的持续时间(减少一,并在我的数组中搜索具有此持续时间的曲目,并将其添加到我的播放列表中,如果没有,则再次将持续时间减少一,然后再次搜索。

在我看来,我必须为循环做两次,一次是通过我的数组,另一次是减少我的持续时间,我想尽一切办法都试过了,但它从来没有像必须的那样奏效。这是我目前最好的尝试,但当我的数组达到4个元素时,它不会停止:

for(int k=tmp.getDuration();k>=0; k--)
{
for (int m=0; m<myDb.getNumberOfTitles();m++)
{
if (myDb.getTitle(m)->getDuration()==k)
{
playlist2.add(myDb.getTitle(m));
}     
}
}
playlist2.print();
size_t i;
size_t place;
size_t size = 4;
CTitle tmps[size];
for (i = 0; i < size && i <= myDb.getNumberofTitles; i++) {
tmps[i] = *myDb.getTitle(i);
}
std::sort(tmps, tmps + size, [](const CTitle &a, const CTitle &b) {
return a.getDuration() > b.getDuration();
});
for (i = size; i <= myDb.getNumberofTitles; i++)
{
for (size_t j = 0; j < size; j++) {
if (tmps[j].getDuration() < myDb.getTitle(i + 1)->getDuration()) {
place = j;
for (j = size - 1; j > place; j--) {
tmps[j] = tmps[j - 1];
}
tmps[place] = *myDb.getTitle(i+1);
}
}
}