Я хочу выполнить сортировку dualPivotQuick с размером массива более 100000, и ошибка возврата моего компилятора с возвращаемым значением 3221225725 Код работает нормально с размером массива менее 10000. Это неправильное распределение памяти или проблема в массиве, но это использовать правильный тип данных long long. что мне делать? спасибо за помощь !!
#include <cstdlib>
#include <windows.h>
#include "psapi.h"
#include "ProcessThreadsApi.h"
#define SIZE 100000
using namespace std;
void swap(long long* a, long long* b){
int temp = *a;
*a = *b;
*b = temp;
}
int partition(long long* arr, int low, int high, long long* lp){
if (arr[low] > arr[high])
swap(&arr[low], &arr[high]);
int j = low + 1;
int g = high - 1, k = low + 1;
int p = arr[low], q = arr[high];
while (k <= g) {
if (arr[k] < p) {
swap(&arr[k], &arr[j]);
j++;
}
else if (arr[k] >= q) {
while (arr[g] > q && k < g)
g--;
swap(&arr[k], &arr[g]);
g--;
if (arr[k] < p) {
swap(&arr[k], &arr[j]);
j++;
}
}
k++;
}
j--;
g++;
swap(&arr[low], &arr[j]);
swap(&arr[high], &arr[g]);
*lp = j;
return g;
}
void QuickSort(long long* arr, int low, int high) {
if (low < high) {
long long lp, rp;
rp = partition(arr, low, high, &lp);
QuickSort(arr, low, lp - 1);
QuickSort(arr, lp + 1, rp - 1);
QuickSort(arr, rp + 1, high);
}
}
int main() {
PROCESS_MEMORY_COUNTERS_EX pmc;
GetProcessMemoryInfo(GetCurrentProcess(),(PROCESS_MEMORY_COUNTERS*)&pmc,sizeof(pmc));
SIZE_T virtualmem = pmc.PrivateUsage;
long long *arr;
arr = (long long*)malloc(SIZE*sizeof(long long));
int ctr = 0;
for(int i=SIZE;i>0;i--)
arr[i] = i;
QuickSort(arr,0,SIZE);
cout << "Total Memory Used : " << (double)virtualmem/1024/1024 << " Mb";
return 0;
}