我有一个char和int数组:{6,A,n,D,5,1,j,e,F}。 我需要通过选择对此进行排序以实现此结果:{e,j,n,6,1,5,A,D,F}。
一开始,我想检查选择排序是否正常,但是 有一些问题。 我将char转换为int(还有另一个解决方案在一个数组中显示整数和字符?)所以我有一个整数数组:6,65,110,68,5,1,106,101,70。 但我的排序给了我这样的效果:5,6,65,68,68,68,68,110。
void selection_sort(int tab1[], int size) {
int index;
for(int i = 0; i < size-1; i++)
{
index = i;
for(int j = i + 1; j < size; j++)
{
if(tab1[j] < tab1[index])
{
index = j;
swap(tab1[j], tab1[i]);
}
}
cout << " " << tab1[index];
}
}
int main() {
const int size = 9;
int tab[size] = {6, 'A', 'n', 'D', 5, 1, 'j', 'e', 'F'};
cout << "Before sort: " << endl << endl;
for(int i = 0; i < size; i++)
{
cout << " " << tab[i];
}
cout << endl << endl;
cout << "After sort: " << endl << endl;
selection_sort(tab,size);
return 0;
}
答案 0 :(得分:1)
问题在于:
if(tab1[j] < tab1[index])
{
index = j;
swap(tab1[j], tab1[i]);
}
尝试:
for(int j = i + 1; j < size; j++)
{
if(tab1[j] < tab1[index])
{
index = j;
}
}
swap(tab1[index], tab1[i]);
你要交换第二个循环中找到的最小元素,但是你要交换第二个循环中的每个迭代。这就是你得到错误价值的原因。
<强>更新强>
还有一个错误:
cout << " " << tab1[index];
应该是:
cout << " " << tab1[i];
您可以在此处使用我建议的更改来尝试代码:http://code.geeksforgeeks.org/tjiwnu
有效。