排序C++,第一个元素不工作
Sorting C++, First element not working
请看一下这段代码。它应该按非递减顺序对其进行排序,但出于某种原因,它将最大的元素放在第一位,然后将其余元素按正确顺序排列。
int min(int start)
{
int minimum = list[start];
int location = 0;
for (int i = start; i < size; i++)
{
if (list[i] < minimum)
{
minimum = list[i];
location = i;
}
}
return location;
}
void sort()
{
int minimum;
for (int i = 0; i < size; i++)
{
minimum = min(i);
int temp = list[i];
list[i] = list[minimum];
list[minimum] = temp;
}
}
@Slava解释了您现有代码被破坏的原因以及如何修复。
我想提供一个替代的解决方案-学习使用标准STL算法。
如std::sort()
算法:
按升序对范围[第一个,最后一个)中的元素进行排序
#include <algorithm>
void sort()
{
std::sort(&list[0], &list[size]);
}
即使您想要实现自己的sort()
逻辑(尽管std::sort()
确实允许您传入自定义函子来实现自定义排序),您的min()
函数也可以使用STL std::min_element()
算法,而sort()
函数也可以采用STL std::swap()
算法:
#include <algorithm>
int min(int start)
{
int *found = std::min_element(&list[start], &list[size]);
return std::distance(&list[0], found);
}
void sort()
{
for (int i = 0; i < size; i++)
{
int minimum = min(i);
if (minimum != i)
std::swap(list[i], list[minimum]);
}
}
int location = 0;
如果list[start]
已经是最小值并且start
!=0您返回的位置不正确。将其更改为
int location = start;
或者您可以使用start
而不是location
:
int min(int start)
{
for (int i = start + 1; i < size; i++)
{
if (list[i] < list[start])
start = i;
}
return start;
}
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- QSqlquery prepare()和bindvalue()不工作
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 在为工作线程访问 lambda 中捕获的向量列表中的元素引用时,是否需要互斥锁?
- 试图使模板用于C 中结构的元素工作
- 为什么 vector::erase 不能在带有 const 的类元素上工作
- 我用于汇总数组元素的 c++ 代码无法正常工作
- C++二进制搜索无法正常工作-查找不在数组中的元素
- 排序C++,第一个元素不工作
- 难以理解某个函数的元素是如何工作的
- 多集是如何工作的,以及如何在多集中找到最小元素
- 如果元素不能为代码工作
- 自定义分配器- Microsoft std::map实现对相同的元素进行两次重新分配,GCC工作得很好
- 使用Qt,其中工作线程创建新的GUI元素
- 矢量中的移动元素没有按预期工作
- 快速排序不能在10k个元素下工作
- C++11 : map::lower_bound 在 Linux 中无法正常工作 2 个或更少的元素
- 这种从堆栈中删除元素的方法是如何工作的
- 向量在将其元素的引用推回到自身时是如何工作的