我需要实现快速排序算法,对动态分配内存的数组进行排序。我试着写一些代码:
#include <stdio.h>
// function to swap elements
void swap(int *a, int *b) {
int t = *a;
*a = *b;
*b = t;
}
// function to find the partition position
int partition(int array[], int low, int high) {
// select the rightmost element as pivot
int pivot = array[high];
// pointer for greater element
int i = (low - 1);
// traverse each element of the array
// compare them with the pivot
for (int j = low; j < high; j++) {
if (array[j] <= pivot) {
// if element smaller than pivot is found
// swap it with the greater element pointed by i
i++;
// swap element at i with element at j
swap(&array[i], &array[j]);
}
}
// swap the pivot element with the greater element at i
swap(&array[i + 1], &array[high]);
// return the partition point
return (i + 1);
}
void quickSort(int array[], int low, int high) {
if (low < high) {
// find the pivot element such that
// elements smaller than pivot are on left of pivot
// elements greater than pivot are on right of pivot
int pi = partition(array, low, high);
// recursive call on the left of pivot
quickSort(array, low, pi - 1);
// recursive call on the right of pivot
quickSort(array, pi + 1, high);
}
}
// function to print array elements
void printArray(int array[], int size) {
for (int i = 0; i < size; ++i) {
printf("%d ", array[i]);
}
printf("\n");
}
// main function
int main() {
size_t n = 8;
int *x = malloc( n * sizeof( int ) );
memcpy( x, ( int[] ){8, 7, 2, 1, 0, 9, 6,0}, n * sizeof( int ) ); // need <string.h>
printf("Unsorted Array\n");
printArray(x, n);
// perform quick-sort on data
quickSort(x, n);
printf("Sorted array in ascending order: \n");
printArray(x, n);
free(x);
}
问题是,给出的指令是将函数编写为
quickSort(int* x, int n)
结构但我当时非常困惑,递归函数是如何知道左右索引的?
另一个问题是,测试我的程序的最佳方法是什么?比如如何高效地创建测试用例。我是一名中级python开发人员,在使用C编程时面临很多问题。