递归归并/快速排序处理大数组栈溢出问题解决方案问询
递归排序栈溢出问题求助
我正在实现递归版归并排序与快速排序以测试效率,处理规模小于10^5的int数组时运行正常,但数组规模超过该值时崩溃,报错:Process finished with exit code -1073741571 (0xC00000FD)。查询后得知这是栈溢出问题,即栈无法容纳所有递归调用,尝试在Clion中增大堆内存但无效。
快速排序实现代码
int devide(int t[], int low, int high){ int devide(int t[], int low, int high){ int pivot_value = t[high]; int i = low; for(int j =low;j<high;j++){ if(t[j]<=pivot_value){ swap(&t[j],&t[i]); i++; } } swap(&t[i],&t[high]); return i; } void quicksort_recursion(int array[], int low, int high){ if(low < high) { int pivot_index = devide(array, low, high); quicksort_recursion(array, low, pivot_index - 1); quicksort_recursion(array, pivot_index + 1, high); } } void quicksort_last(int t[], int length){ quicksort_recursion(t,0,length-1); }
归并排序实现代码
void merge_sorted_arrays(int a[], int l, int m, int r) { int left_length = m - l + 1; int right_length = r - m; int temp_left[left_length]; int temp_right[right_length]; int i, j, k; for (i = 0; i < left_length; i++) temp_left[i] = a[l + i]; for (i = 0; i < right_length; i++) temp_right[i] = a[m + 1 + i]; for (i = 0, j = 0, k = l; k <= r; k++) { if ((i < left_length) && (j >= right_length || temp_left[i] <= temp_right[j])) { a[k] = temp_left[i]; i++; } else { a[k] = temp_right[j]; j++; } } } void merge_sort_recursion(int a[], int l, int r) { if (l < r) { int m = l + (r - l) / 2; merge_sort_recursion(a, l, m); merge_sort_recursion(a, m + 1, r); merge_sorted_arrays(a, l, m, r); } } void merge(int a[], int length) { merge_sort_recursion(a, 0, length - 1); }
我想了解是否存在基于递归的栈溢出解决办法,或是必须将其改为迭代实现。
PS:swap(int *x, int *y)是用于交换数组中两个元素的函数。
内容的提问来源于stack exchange,提问作者Faycal Faycal
相关产品推荐
相关产品推荐

