#c #quicksort
Вопрос:
Здравствуйте, мне было интересно, может ли кто-нибудь указать мне правильное направление, когда я посещал свой первый урок и вроде как застрял в функции разделения. Я понимаю, что сравниваю свой раздел и свод с циклами while, и если раздел больше, я меняю его на свод, а если раздел меньше, то мы перемещаемся в раздел, чтобы продолжать сравнивать. Я не знаю, куда идти дальше.
/* Splits function which splits the array when the pivot after pivot and low element meet, which works with quick_sort function */
int split(int arr[], int low, int high) {
//if (high > low) {
// Selecting last element as the pivot
int pivot = arr[high];
// Index of the smaller element
int partition = arr[low];
int temp;
if (high>low) {
while (partition >= pivot) {
temp = partition;
partition = pivot;
pivot = partition;
pivot--;
}
while (partition <= pivot) {
partition ;
}
}
}
/* quick_sort function which combined with the split function
sorts out the array */
void quick_sort(int a[], int first, int last) {
if (first < last) {
// Calls for split function and stores in s variable
int s = split(a, first, last);
// Calls for quick_sort function which causes recursion
quick_sort(a, first, s-1);
quick_sort(a, s 1, last);
}
}
// Function in which prints out the sorted array
void printArray(int a[], int n)
{
int i;
for (i=0; i < n; i )
{
printf("%d ", a[i]);
}
printf("n");
}
// Main function
int main() {
// Asks user for input in determining the size of array
int n;
printf("Enter the number of elements in array: ");
scanf("%d", amp;n);
// Asks user to enter a series of numbers for array
int arr[n];
printf("Please enter a series of numbers: ");
for (int i = 0; i < n; i ) {
scanf("%d", amp;arr[i]);
}
// Calls for quick_sort function
quick_sort(arr, 0, n-1);
// Calls for printArray function
printArray(arr, n);
// Ends program
return 0;
}```
Комментарии:
1. То, что у вас здесь, не является быстрой сортировкой — вы обновляете значение pivot по мере выполнения своей
split()
функции (традиционно называемойpartition
), чего не делает быстрая сортировка. — У вас есть другие вещи, которые на самом деле не имеют смысла, напримерpartition = pivot; pivot = partition;
. Вы, вероятно, захотите обратиться к некоторым стандартным реализациям для получения подсказок .