气泡排序微小错误
Bubble sort tiny error
我正试图让我的程序从最小到最大对这个数字数组进行排序,但结果却是相反的。换句话说,我尽量不使用[4],因为这就是这个算法的作用,但我不知道怎么做。感谢阅读。
输出:9 12 3 14
#include <iostream>
using namespace std;
int main() {
int a[4] = {12, 9, 14, 3};
int temp;
for(int i = 0; i < 4; i++) {
if(a[i] > a[i + 1]) {
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
}
cout << a[i] << " ";
}
return 0;
}
您有三个错误:
错误1: 循环期间的越界访问
此:
for(int i = 0; i < 4; i++)
应该是
for(int i = 0; i < 3; i++)
原因是,如果你使用第一个(错误的)版本,你就会出现缓冲区溢出:
if(a[i] > a[i + 1]) // if i == 3, a[3+1] == a[4] == out-of-bounds
错误2:排序时写入输出
你这样做:
cout << a[i] << " ";
在排序的中间。如果排序尚未完成,则打印出数组的值是没有意义的。
这应该放在分拣代码之外(一旦分拣完成):
for ( int i = 0; i < 4; ++i)
cout << a[i] << " ";
错误3:气泡排序的错误实现。
冒泡排序的工作原理是对数据进行多次遍历,直到检测到数据已排序。您的代码只对数据进行一次传递,然后退出。
您需要做的是创建一个while
或类似的循环,即for
循环。只有当数据需要至少再通过一次数据时,才会执行while
循环。如果for
循环中的if
条件从未执行(意味着没有发生交换,因此数据被排序),您将知道数据何时被排序。
这里有一个例子:
int temp;
bool is_sorted = false;
while ( !is_sorted ) // execute while data is not sorted
{
isSorted = true; // assume data is sorted
for(int i = 0; i < 3; i++)
{
if(a[i] > a[i + 1])
{
//.. swap the items
//...
isSorted = false; // swap made, so data was not sorted
}
}
}
已经有一个名为"算法"的头文件可以实现这一点:
#include <iostream>
#include <algorithm>
using namespace std;
typedef pair<char, int> new_pair;
struct sorting{
bool operator() (int i, int j){return i < j;}
}test_sort;
int main(void){
int test[4] = {5, 2, 1, 10};
sort(test, test + 3, test_sort);
for(int i = 0; i <= 3; i++){
cout <<test[i] << endl;
}
return 0;
}
我希望我能帮助你。
相关文章:
- C++选择排序算法中的逻辑错误
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 显示错误输出的简单数组排序程序
- 对单向链表进行排序时出现运行时错误
- 无法在我的堆排序代码中找到错误.无法正确执行.C++
- 在气泡排序程序中未声明错误功能
- 仅在大型阵列上出现合并排序分段错误
- 分段 排序函数实现中的错误
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 字符串上的合并排序上的 Seg 错误
- 将图形表示为unordered_map<字符串、向量>时拓扑排序错误<string>
- C++为什么我的指针选择排序中存在分段错误?
- 我想在 c++ 中对单向链表进行冒泡排序,但我一直面临左值错误,无法解决它
- 尝试按值对地图进行排序,但出现错误
- 使用快速排序对 C++ 中的可视化工具错误进行排序
- 合并排序:分段错误核心转储
- 比较迭代器会使程序崩溃,而不会在自定义气泡排序实现中出现错误
- 合并排序中的错误计数:计数反转
- 使用STL对用户输入数组进行排序的错误有什么解决方案吗?
- C++中的错误排序算法