选择排序不排序第一个值
Selection sort not sorting first value
我写了这个c++函数来排序数组,它工作,但它似乎不适用于第一个值:它总是更大而不是更小!
void s_iSort (double a[])
{
cout << "INCREASING SORTER:nn";
unsigned int mx,maxx;
double temp;
cout << "Insert maximum element to sort: "; cin>>mx;
for (int c=0; c<mx; c++)
{
maxx=0;
for (int i=c; i<mx; i++)
if (a[i]<a[maxx])
maxx=i;
temp=a[c];
a[c]=a[maxx];
a[maxx]=temp;
}
cout << "nDONE!nn";
}
这是怎么回事?
您应该使用调试器,或者尝试向橡皮鸭解释您的算法。但是,我心情不好,会指出你的错误:
for (int c=0; c<mx; c++) {
maxx=0;
for (int i=c; i<mx; i++) if (a[i]<a[maxx]) maxx=i;
temp=a[c];
a[c]=a[maxx];
a[maxx]=temp;
}
在这个循环的每次迭代中,你要遍历一个元素范围,找到该范围内的最小值,并将其作为该范围的第一个元素。它在第一次迭代中工作,但在第二次迭代中就出现了问题。将maxx
(应该是该范围内的第一个元素)初始化为0
,即数组的第一个元素。但是,您应该只考虑尚未排序的元素,即将其更改为
maxx = c;
还要注意的是,(除了练习)你不应该编写自己的排序算法,而应该使用std::sort
。
相关文章:
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- std::find,返回所有找到的值的替代方法,而不仅仅是存在重复的向量的第一个值
- 如何仅读取文本文件中的第一个值
- 在C++中,如何在第一个"system()"结束后执行第二个"system()"?
- 查找不在标准中的第一个值::设置<int>最小-最大值
- C++:忽略第一个 cin.ignore 之后的输入
- 在C++中打印多个矢量的第一个值
- C++去除前x个元素的有效方法,在不改变向量大小的情况下将第x+1个元素推到第一个
- C++第一个cout将不会打印
- 我们可以在第一个else-if条件结束后使用另一个else-if条件吗
- OpenGL:第二个VBO破坏了第一个VBO
- 为什么第一个Dynamic_cast没有投射到基类?
- OpenGL 2D游戏只绘制第二个精灵纹理而不是第一个
- C++ 为什么程序只读取第一个值
- 在我的第一个C++程序中需要一些帮助(简单)
- 为什么我的代码在第一个 if 语句处中断?
- 是否可以从另一个类对象调用一个类函数而不继承第一个类
- 如何按第一个,然后是第二个,然后是第三个对 2d 数组进行排序,..使用 C++ 的列
- 如何按第一个 STL 列表的顺序对第二个 STL 列表进行排序
- 选择排序不排序第一个值