我已编写此代码以使用选择排序对数组进行排序,但它不会正确对数组进行排序。
#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 ++的新手。
感谢您的帮助。
答案 0 :(得分:1)
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]
,访问数组中最后一个元素旁边的内存中的位置,这不能保证包含任何有意义的内容(未初始化) ),因此输出中的随机数。
答案 1 :(得分:0)
您在评论的评论中提供了一些示例输入。
我编译并执行了以下内容,我相信这些内容可以准确地重现您显示的代码和示例输入:
#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
这些结果看起来是正确的。我发现您的代码没有任何问题,并且通过使用您发布的示例输入,这确认了这一点。