使用简单的暴力算法找到数组中最大的4个元素
find the 4 biggest elements of an array by using a simple brute force algorithm
我有一个数组(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);
}
}
}
相关文章:
- 如何在C++中比较两个char数组
- 在c++中获取两个大int,并将它们存储在数组中
- 如何以优化的方式同时迭代两个间距不相等的数组
- 运算符重载 (+),用于添加两个具有 C++ 的数组
- 如何从txt文件中读取多个不同长度的数组?
- C++,数组有多少个地址?
- 将字符串拆分为标记,并将标记拆分为两个单独的数组
- 为什么 2 个相同数组的元素彼此相等
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- 可以将两个相同类型的连续数组视为一个数组吗?
- 在数组中输入 n 个整数的列表,并以类似于钟摆来回移动的方式排列它们. 输入-1 3 2 5 4,输出5 3 1 2 4
- 使用嵌套函数数组是个好主意吗?
- 链表数组(5 个队列)
- 是否有可能通过溢出 C 中的第一个元素来写入数组第二个元素
- 指向数组第一个元素的指针的地址
- 用 std::valarray 替换 POD C 样式数组是个坏主意吗?
- OpenGL:两个顶点数组 + 两个索引数组
- c++多维数组多个数据类型
- 使用C++AMP处理大型数组(65536+个元素)
- 在c++中使用MKL函数初始化数组是个好主意吗?