通过伪代码制作功能代码,排序算法不正确

时间:2020-07-04 23:11:16

标签: c++ algorithm sorting

我正在研究一个名为sortBad的练习问题。这是伪代码:

print(df)

    pubdate lang  Count
0  20140619   en    1.5
1  20150308   en    1.0
2  20140207   en    0.5
3  20180319   en    1.0
4  20150223   en    1.0

那只是我们想要它做什么的想法。对上半部分进行排序,对下半部分进行排序,再对上半部分进行排序。

这个想法是通过分而治之的技术对整数进行排序和排列。我们的意思是除以m,这是alpha的上限(用户将输入数字,例如.75)* n。这是我到目前为止在C ++中得到的结果:

sortBad(A[0···n − 1])
{
    if (n = 2) and (A[0] > A[1])
        swap A[0] and A[1]
    else if (n > 2)
        m = ⌈? · ?⌉
        sortBad(A[0 ··· m − 1])
        sortBad(A[n – m ··· n − 1])
        sortBad(A[0 ··· m − 1])
}

(请注意,我们正在测试alpha = .666和alpha = .75) 当我运行它时,它可以对数组进行排序,但是要花很多时间。大约有15个项目的数组可能需要一分钟左右的时间(根据编译器的时钟时间)进行排序。

我应该改变什么才能使其成为运行更快的更好的算法?我觉得它可能在某处做了太多工作。是的,我们必须使用alpha来创建分割点。否则,我会采用a草排序技术,我知道这也不是最快的方法,但是比这更快!)

***编辑: 我更改了一些代码以立即将其用于我的sortBad:

void sortBad(int arr[], int low, int high, double alpha)
{
    int t = high - low + 1; //t = size of array

    if ((t == 2 ) && (arr[low] > arr[high]))//two numbers in array
    {
        swap(arr[low], arr[high]); 
    }
    else if (t > 2)
    {
        int m = ceil(alpha * t)/2; //gets ceiling of alpha * n
        sortBad(arr, 0, high-m, alpha);
        sortBad(arr, low+m, high, alpha);
        sortBad(arr, 0, high-m, alpha);
    }
    return;
}

到目前为止,它的运行速度要快得多,但是我想知道在计算int m时是否有一种乘以... / 3的方法,所以它只是alpha *(t + 1)?< / p>

0 个答案:

没有答案
相关问题