Назначение быстрой сортировки в C

#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; . Вы, вероятно, захотите обратиться к некоторым стандартным реализациям для получения подсказок .