为什么我改编的选择排序算法在 C++ 中不起作用
Why does my adapted Selection Sort algorithm not work in C++
我有一年多前在 Python here 中编写的选择排序代码,但是当我尝试将其改编为 C++ 时,它完全停止工作,并且该算法逻辑上完全一样,算法排序不同,打印出来乱七八糟。
void SelectionAscending2(int array[], int numItems)
{
int count;
int temp;
int minimum;
int Pass = 0;
//while (Pass < numItems)
for (int i = Pass; i < numItems; i++)
{
count = Pass + 1;
minimum = Pass;
//while (count <= numItems)
for (int j = count; j <= numItems; j++)
{
if (array[count] < array[minimum])
{
minimum = count;
count += 1;
}
}
temp = array[Pass];
array[Pass] = array[minimum];
array[minimum] = temp;
Pass += 1;
}
for (int i = 1; i < numItems; i++)
{
cout << array[i] << ", ";
}
}
int main()
{
int myArray[8] = { 4, 2, 1, 3, 6, 5, 8, 7 };
int length = sizeof(myArray) / sizeof(myArray[0]);
SelectionAscending2(myArray, length);
}
此代码在 python 中运行良好,但在 C++ 中它输出的是:
2, 3, 4, 5, 6, 0, 7,
我已经为此苦苦挣扎了 3 天,但我所做的一切都没有奏效。
实际上你已经从 python 代码转移了一点。
在 python 代码中您设置了 length of array (numItems)
到 actual length - 1
但在这里你把 length (numItems)
和 actual length
.
一样
而且在打印时你是从 i = 1 开始打印的。所以这就是为什么
您的代码没有按预期工作。
因此您可以进行这些更改(方法之一):
- 将第二个for循环中的
j <= numItems
改为j < numItems
- 使用最后一个for循环打印数组时,从i = 0开始
我有一年多前在 Python here 中编写的选择排序代码,但是当我尝试将其改编为 C++ 时,它完全停止工作,并且该算法逻辑上完全一样,算法排序不同,打印出来乱七八糟。
void SelectionAscending2(int array[], int numItems)
{
int count;
int temp;
int minimum;
int Pass = 0;
//while (Pass < numItems)
for (int i = Pass; i < numItems; i++)
{
count = Pass + 1;
minimum = Pass;
//while (count <= numItems)
for (int j = count; j <= numItems; j++)
{
if (array[count] < array[minimum])
{
minimum = count;
count += 1;
}
}
temp = array[Pass];
array[Pass] = array[minimum];
array[minimum] = temp;
Pass += 1;
}
for (int i = 1; i < numItems; i++)
{
cout << array[i] << ", ";
}
}
int main()
{
int myArray[8] = { 4, 2, 1, 3, 6, 5, 8, 7 };
int length = sizeof(myArray) / sizeof(myArray[0]);
SelectionAscending2(myArray, length);
}
此代码在 python 中运行良好,但在 C++ 中它输出的是:
2, 3, 4, 5, 6, 0, 7,
我已经为此苦苦挣扎了 3 天,但我所做的一切都没有奏效。
实际上你已经从 python 代码转移了一点。
在 python 代码中您设置了
一样length of array (numItems)
到actual length - 1
但在这里你把length (numItems)
和actual length
.而且在打印时你是从 i = 1 开始打印的。所以这就是为什么 您的代码没有按预期工作。
因此您可以进行这些更改(方法之一):
- 将第二个for循环中的
j <= numItems
改为j < numItems
- 使用最后一个for循环打印数组时,从i = 0开始