我写了这个c ++函数来对一个数组进行排序,它可以工作,但它似乎不适用于第一个值:它总是更大而不是更小!
void s_iSort (double a[])
{
cout << "INCREASING SORTER:\n\n";
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!\n\n";
}
这有什么意义?
答案 0 :(得分:1)
您应该使用调试器,或尝试向橡皮鸭解释您的算法。但是,我处于橡皮鸭的心情,并指出你的错误:
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
。