Алгоритм быстрой сортировки грохот &амп; отладка помочь
Дорогие все,
Я застрял на коде ниже и, кажется,не могу понять, почему он продолжает падать. Предполагается, что это простой алгоритм быстрой сортировки на языке Си, но он дает мне ошибку сегментации и сбой после ввода входных данных. Я отладил его с помощью Dev C++, и он показывает, что он терпит крах при рекурсивных вызовах quicksort. Кто-нибудь может указать, где?
Кроме того, для такой программы, как эта, может ли кто-нибудь указать отладчик или метод, который поможет мне исправить это самостоятельно? У меня есть и другие подобные программы, которые мне нужно будет тестировать / практиковать, и я не хочу продолжать публиковать подобные сообщения. Заранее всем спасибо.
/* includes and macros */ // required for input / output with minGW GCC #include <stdio.h> #define printf __mingw_printf // required for the random integer generator functions #include <stdlib.h> #include <time.h> /* global declarations */ static unsigned short n; /* function prototypes */ void swapSort(int *, int *); void quickSortMid(int [], unsigned short, unsigned short); int main() { /* variable array declaration */ printf("How many integers do you want sorted by Quick Sort? "); scanf("%hu", &n); int arrayInput[n]; /* for rand() */ srand(time(NULL)); /* array input */ printf("\n"); for(register unsigned short i = 0; i <= n-1; i++) arrayInput[i] = rand(); /* sort using the Quick Sort Medium algorithm */ quickSortMid(arrayInput, 0, n-1); /* print the sorted array */ printf("\n"); for(register unsigned short i = 0; i <= n-1; i++) printf("[%d] ", arrayInput[i]); printf("\n"); return 0; } /* function definitions */ void swapSort(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } void quickSortMid(int intArray[], unsigned short low, unsigned short high) { unsigned short e = high / 2, hole = e, ul = high; int temp = intArray[e]; while(low < high) { if(hole >= e) { if(intArray[low] > temp) { swapSort(&intArray[low], &intArray[hole]); hole = low; } else low++; } else { if(intArray[high] < temp) { swapSort(&intArray[high], &intArray[hole]); hole = high; } else high--; } } intArray[hole] = temp; // recursive calls of Quick Sort to completely sort the array if(e >= 2 && (ul-e) >= 2) { quickSortMid(intArray, 0, e-1); quickSortMid(intArray, e+1, ul); } }
Что я уже пробовал:
Я пробовал отлаживать с помощью Dev C++ и сузил проблему до рекурсивных вызовов функции, но, похоже, не могу понять, что не так с логикой.
Скачал много разных отладчиков и много читал об отладке, но ничего такого, что помогло бы мне научиться правильно отлаживать мои собственные программы. Если бы это была простая логическая проблема, то я мог бы использовать printf, чтобы увидеть, где сортировка была неправильной и почему, но программа терпит крах.