生成半排序BubbleSort
Generate Half-Sorted BubbleSort
本文关键字:BubbleSort 排序 更新时间:2023-10-16
我试图生成部分排序的数组。
有很多方法可以做&我选择了自己的方法,即使用任何排序算法,在排序的中间放一个"中断"。
在这种情况下,我选择Bubble排序。
我所做的是,当计数器达到n个值的一半时,我停止对值进行排序
但是,根据我的逻辑,我不知道它怎么不起作用。
代码:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> a;
int i, j, p,n,temp;
cout << "Enter No. of Elements : ";
cin >> n;//user desired of total integers
for (i = 1; i <= n; i++)//this will loop from 1 to n value
{
a.push_back(i);//push into a vector
}
for (p = 1; p <= n ; p++)
{
for (j = 1; j <= n; j++)
{
if (j<n/2)// this is where, the sorting will stop
{
if (a[j] > a[j + 1])
{
temp = a[j]; // Interchange Values
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
cout << "nAfter Sorting : n";
for (i = 0; i <= n-1; i++)
{
cout << a[i] << endl;
}
system("pause");
return 0;
}
数组最初是排序的,至少以相反的顺序生成它,以使测试有意义(或者也可以使用一些随机生成器):
for (i = n - 1; i >= 0; i--)
然后,你的逻辑是有缺陷的:你不能中途停止冒泡排序(冒泡排序不能保证之前移动的元素不会再次移动,这就是为什么它需要N^2次迭代),相反,你需要让它在n/2
元素上而不是n
上迭代。
类似于:
for (p = 0; p <= n / 2; p++)
{
for (j = 0; j <= n / 2; j++)
{
if (a[j] > a[j + 1])
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
相关文章:
- 二叉排序树无法编译
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- C++选择排序算法中的逻辑错误
- 使用C++程序合并排序没有得到正确的输出
- 计算排序向量的向量中唯一值的计数
- 排序算法c++
- 使用2个键的cpp-stl::优先级队列排序不正确
- 将结构向量排序为子组
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 如何对点云数据进行排序
- 对字符串进行排序时,在c++中处理sort()
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 下面是排序算法O(n)吗
- std::sort()函数无法对向量的一部分进行排序
- shell排序中的交换和比较
- clang格式:禁用排序包含
- 显示错误输出的简单数组排序程序
- 为什么我的排序算法会更改数组值
- 使用BubbleSort对数组进行排序
- 生成半排序BubbleSort