生成半排序的BubbleSort

时间:2014-08-27 14:08:35

标签: c++ sorting

我试图生成部分排序的数组。

有许多方法可以做到&我选择了自己的方法,即使用任何排序算法,在排序中间放置一个“中断”。

在这种情况下,我选择冒泡排序。

我做的是,当计数器达到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;
}

1 个答案:

答案 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;
        }
    }
}