我试图生成部分排序的数组。
有许多方法可以做到&我选择了自己的方法,即使用任何排序算法,在排序中间放置一个“中断”。
在这种情况下,我选择冒泡排序。
我做的是,当计数器达到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;
}
答案 0 :(得分: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;
}
}
}