生成半排序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;
        }
    }
}