【发布时间】:2021-12-14 21:32:30
【问题描述】:
如何构造一个以数组和数组长度为两个参数的快速排序算法?
即:
void quick_sort(int A[], int n)
像这样。
但是,我只熟悉使用 3 个参数、一个数组、最低索引和最高索引编写快速排序。
下面的 Quicksort 函数接受 3 个参数,arr、l 和 h。
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int partition(int arr[], int l, int h) {
int pivot = arr[l];
int i = l;
int j = h;
while (i < j) {
while (arr[i] <= pivot) {
i++;
}
while (arr[j] > pivot) {
j--;
}
if (i < j) {
swap(&arr[j], &arr[i]);
}
}
swap(&arr[l], &arr[j]);
return j;
}
void quickSort(int arr[], int l, int h) {
if (l < h) {
int j = partition(arr, l, h);
quickSort(arr, l, j - 1);
quickSort(arr, j + 1, h);
}
}
但是,我需要编写一个只有两个参数的 QuickSort 实现。
你如何编写执行相同排序的函数?
也就是说,我们只有n的长度,而上面的完整快速排序算法有l和h作为参数。
【问题讨论】:
-
你可以传递一个缩短的数组。例如,您可以传递 (array=arr+3, length=10-3),而不是传递 (array=arr, startindex=3, length=10)。
-
n显然是一个非常没用的名字...第二个参数 (int n) 应该是什么意思? -
@Alexander 很抱歉造成混乱。 int n 表示数组的长度。
-
@EdmCoff 感谢您的建议!我会试试的。
-
@Haya_05120512 你不需要道歉。亚历山大很为难。在这种情况下,
n显然是一个非常明显的名称。
标签: arrays c sorting quicksort