气泡排序:为什么它不能正常工作?
Bubble sort: Why it isn't working correctly?
当我键入1、2、3、4、5作为输入时。输出很好,因为它已经从最低到高。但是当我键入5、4、3、2、1时,它正在输出:
4、3、2、1、5
我试图做泡沫排序。
main() {
int a[5], i, smallest, temp;
cout << "Enter 5 numbers: " << endl;
for ( i = 0; i <= 4; i++ ) {
cin >> a[i];
}
for ( i = 0; i <= 4; i++ ) {
smallest = a[i];
if ( smallest > a[i+1] ) {
temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
}
}
cout << endl << endl;
for ( i = 0; i <= 4; i++ ) {
cout << a[i] << endl;
}
system("pause");
}
我确实在您的有用回复之后将代码更改为此:
for ( i = 0; i <=4; i++ ) {
smallest = a[i];
for ( j = 1; j <= 4; j++ ) {
if ( smallest > a[j] ) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
我不知道为什么它不起作用。我真的很抱歉,因为我是编程中的菜鸟,所以请忍受我刚起步:)
任何帮助都将不胜感激。
谢谢 ^。 ^
单个通行证还不够,您必须一遍又一遍地扫描数组,直到没有进行交换:
bool sorted = false;
while (!sorted) {
sorted = true;
for ( i = 0; i <= 4 - 1; i++ ) { /* notice 4 - 1 since we address a[i + 1] */
smallest = a[i];
if ( smallest > a[i+1] ) {
temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
sorted = false;
}
}
}
,因为您的所有算法都可以将最大数字移至数组末端。由于bubble sort
具有时间复杂性O(n²)
,因此必须使用两个嵌套周期。您只需重复编写的周期,直到对数组进行排序。请注意,这不是很有效,但应该起作用。
您还应该检查您是否将无法访问来自数组范围的索引。
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 为什么STD ::计数将常数传递给Lambda,而不是在弦上工作时而不是字符
- sdl软件渲染器不工作,工作在硬件加速的一个
- C++程序已停止工作-求解常微分方程