欢迎,我必须使用MinGW在C ++中编写Quicksort Lomuto和Hoare变体。
所以,我已经做到了。算法适用于数组[N],其中N是5,20,100这样的小数,但我需要在N = 200 000时进行。并且有例外。我不知道为什么。其他算法(插入,选择,Heapsort等适用于N = 200 000)。
这是我的代码:
<Response>
<Dial>
<Number url="other-script">
4151234567
</Number>
</Dial>
</Response>
我正在以这种方式创建数组:
int PartitionLomuto(int A[], int p, int r)
{
int x = A[r],
i = p - 1,
temp;
for (int j = p; j <= r - 1; j++)
if (A[j] <= x) {
i++;
temp = A[i];
A[i] = A[j];
A[j] = temp;
}
temp = A[i + 1];
A[i + 1] = A[r];
A[r] = temp;
return i + 1;
}
void Lomuto (int A[], int p, int r)
{
if (p < r) {
int q = PartitionLomuto(A, p, r);
Lomuto(A, p, q - 1);
Lomuto(A, q + 1, r);
}
}
//* **************************************************
int PartitionHoare(int A[], int p, int r)
{
int x = A[p],
i = p,
j = r,
temp;
while(true) {
while(A[j] > x)
j--;
while(A[i] < x)
i++;
if(i < j) {
temp = A[i];
A[i] = A[j];
A[j] = temp;
i++;
j--;
}
else
return j;
}
}
void Hoare(int A[], int p, int r)
{
if(p < r) {
int q = PartitionHoare(A, p, r);
Hoare(A, p, q);
Hoare(A, q + 1, r);
}
}
以这种方式调用函数:
int const arraySize = 200000;
int *ascending = new int[arraySize],
*descending = new int[arraySize],
*random = new int[arraySize];
异常在分区功能中。
我真的不知道会发生什么。我认为算法是正确的。