我正在研究一个名为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>