冒泡排序使用幻灯片而不是交换
Bubble Sort Using Slides instead of swaps
目前我被要求设计四种排序算法(插入,外壳,选择和气泡),我有4个工作完美的3;唯一不能正常工作的是冒泡排序。现在,我很清楚正常的冒泡排序如何与使用临时变量交换两个索引,但棘手的部分是,它需要使用数组索引[0]作为临时代替正常的温度,用于交换,和幻灯片下数组变量列表的前面,最后通过分配最后指数的温度是最大的价值。
我已经玩了一段时间,甚至试图查找参考资料,但遗憾的是我找不到任何东西。我希望其他人之前做过这个,可以提供一些有用的建议。这是一种最后的手段,因为我一直在修改和运行通过笔和纸,试图找到我的致命错误。无论如何,我的代码如下…
void BubbleSort(int TheArray[], int size)
{
for (int i = 1; i < size + 1; i++)
{
TheArray[0] = TheArray[i];
for (int j = i + 1; j < size; j++)
{
if (TheArray[j] > TheArray[0])
TheArray[0] = TheArray[j];
else
{
TheArray[j - 1] = TheArray[j];
}
}
TheArray[size- 1] = TheArray[0];
}
}
感谢任何反馈;非常感谢。
如果我理解了问题说明,我认为您正在寻找以下内容:
void BubbleSort(int theArray[], int size)
{
for (int i = 1; i < size + 1; i++)
{
theArray[0] = theArray[1];
for (int j = 1; j <= size + 1 - i; j++)
{
if (theArray[j] > theArray[0])
{
theArray[j-1] = theArray[0];
theArray[0] = theArray[j];
}
else
{
theArray[j - 1] = theArray[j];
}
}
theArray[size-i+1] = theArray[0];
}
}
你的代码缺少的部分,我认为,是一旦你找到一个新的最大值,你必须把它放回数组中,然后把新的最大值放在数组[0]存储位置(见比较后的theArray[j-1] = theArray[0])。此外,内部循环希望每次少运行一次,因为最后一个元素将是当前的最大值,所以您不想重新访问这些数组元素。(见for(int j = 1;J <= size + 1 - I;j + +))
为了完整起见,下面是我用来(简单地)测试它的主要驱动程序:int main()
{
int theArray[] = { 0, 5, 7, 3, 2, 8, 4, 6 };
int size = 7;
BubbleSort(theArray, size);
for (int i = 1; i < size + 1; i++)
cout << theArray[i] << endl;
return 0;
}
相关文章:
- QTreeView幻灯片多选后无法使用单击选择
- C++嵌套if语句,基本货币交换
- shell排序中的交换和比较
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- 通过交换元素使数组相同
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- 交换运算符 + 重载会导致无限递归
- 为什么 std::reduce 需要交换性?
- 复制和交换习惯用法与移动操作之间的交互
- C++ - 没有自定义交换功能的移动分配运算符?
- 如何在数组中交换最小和最大的位置?
- 尽管一切看起来都很好,但值不会交换
- C++交换来自同一类成员的参数值,处理多个类
- 插入排序的最小交换
- C++在 2 个向量向量之间交换向量
- 转置矩阵:交换元素不会更改值
- 不正确的比较和交换计数器输出用于快速排序功能
- 交换函数不是在 C++ 中交换 2D 数组的元素
- std::vector move 而不是交换到空 vector 并释放存储
- 冒泡排序使用幻灯片而不是交换