在C++中实现选择排序时出错
Error implementing selection sort in C++
我编写了这段代码来使用选择排序对数组进行排序,但它没有正确对数组进行排序。
#include <cstdlib>
#include <iostream>
using namespace std;
void selectionsort(int *b, int size)
{
int i, k, menor, posmenor;
for (i = 0; i < size - 1; i++)
{
posmenor = i;
menor = b[i];
for (k = i + 1; k < size; k++)
{
if (b[k] < menor)
{
menor = b[k];
posmenor = k;
}
}
b[posmenor] = b[i];
b[i] = menor;
}
}
int main()
{
typedef int myarray[size];
myarray b;
for (int i = 1; i <= size; i++)
{
cout << "Ingrese numero " << i << ": ";
cin >> b[i];
}
selectionsort(b, size);
for (int l = 1; l <= size; l++)
{
cout << b[l] << endl;
}
system("Pause");
return 0;
}
我找不到错误。我是C++新手。
感谢您的帮助。
selectionSort()
函数很好。数组初始化和输出不是。见下文。
int main()
{
int size = 10; // for example
typedef int myarray[size];
myarray b;
for (int i=0;i<size;i++)
//------------^^--^
{
cout<<"Ingrese numero "<<i<<": ";
cin>>b[i];
}
selectionsort(b,size);
for (int i=0;i<size;i++)
//------------^^--^
{
cout<<b[l]<<endl;
}
system("Pause");
return 0;
}
在 C 和 C++ 中,包含 n
元素的数组以0
索引开头,以n-1
索引结束。对于您的示例,起始索引为 0
,结束索引为 9
。当你像在发布的代码中一样迭代时,你检查索引变量是否小于(或不等于)数组的大小,即 size
.因此,在迭代的最后一步,您访问 b[size]
,访问数组中最后一个元素旁边的内存位置,该位置不能保证包含任何有意义的内容(未初始化),因此输出中的随机数。
您在问题的评论中提供了一些示例输入。
我编译并执行了以下内容,我相信它准确地再现了您显示的代码和您的示例输入:
#include <iostream>
void selectionsort(int* b, int size)
{
int i, k, menor, posmenor;
for(i=0;i<size-1;i++)
{
posmenor=i;
menor=b[i];
for(k=i+1;k<size;k++)
{
if(b[k]<menor)
{
menor=b[k];
posmenor=k;
}
}
b[posmenor]=b[i];
b[i]=menor;
}
}
int main(int argc, char **argv)
{
int a[10] = {-3, 100, 200, 2, 3, 4, -4, -5, 6, 0};
selectionsort(a, 10);
for (auto v:a)
{
std::cout << v << ' ';
}
std::cout << std::endl;
}
结果输出如下:
-5 -4 -3 0 2 3 4 6 100 200
这些结果看起来是正确的。我认为您的代码没有任何问题,并且通过使用您发布的示例输入,这证实了这一点。
相关文章:
- 二叉排序树无法编译
- 访问者访问变体并返回不同类型时出错
- 在Linux for Windows上编译C++代码时出错
- 读取文件的最后一行并输入到链接列表时出错
- 重载操作程序时出错>>用于类中的字符串 memebr
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- 合并两个排序链表时运行时出错
- 尝试对 std::map<int, class> 进行排序时出错
- 计算选择排序中的比较次数时出错
- 修改气泡排序的程序出错
- 堆损坏 使用动态数组进行气泡排序时出错
- 在C++中实现选择排序时出错
- bucket排序的实现中出错
- 在VC++6中使用向量进行数组排序时出错,而在VC++2012中没有错误
- 当对可被7整除的向量大小进行排序时,是否有什么东西会导致快速排序算法出错
- 在vector排序中使用c++模板函数出错
- c++插入排序:在函数之间传递值时出错
- 运行时使用排序函数出错
- 自定义排序元组向量时出错
- EXC_BAD_ACCESS线程中运行递归合并排序方法时出错