The algorithm sorts a table with random numbers per 100 thousand, 500 thousand, 1 million, but when sorting an already sorted table or a table back sorted, it throws a Stack Overflow exception. I know that this is not enough memory, but how can I solve this problem?
#include "stdafx.h" #include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <math.h> #include <time.h> #include <windows.h> void quicksort(int *A, int p, int r); int partition(int *A, int p, int r); //int A[100000]; int A[500000]; //int A[1000000]; //int B[100000]; //int B[500000]; //int B[1000000]; //int C[100000]; //int C[500000]; //int C[1000000]; int main() { srand(time(NULL)); int length = 500000; for (int i = 0; i < length; i++) { A[i] = i; //printf("%d ", A[i]); } /*for (int i = 0; i < length; i++) { B[i] = i; //printf("%d ", B[i]); }*/ /*for (int i = length-1; i >= 0; i--) { C[i] = i; printf("%d ", C[i]); }*/ float start = GetTickCount(); quicksort(A, 0, 499999); float finish = GetTickCount(); float result = (finish - start) / 1000; printf("\n losowa (seconds): %f", result); getchar(); } void quicksort(int *A, int p, int r) { float start = GetTickCount(); int q; if (p < r) { q = partition(A, p, r); quicksort(A, p, q - 1); quicksort(A, q + 1, r); float finish = GetTickCount(); float result = (finish - start) / 1000; } } int partition(int *A, int p, int r) { int i, j, x, tmp; x = A[r]; i = p - 1; for (j = p; j <= r - 1; j++) { if (A[j] <= x) { i++; tmp = A[j]; A[j] = A[i]; A[i] = tmp; } } tmp = A[i + 1]; A[i + 1] = A[r]; A[r] = tmp; return i + 1; }