-
#include <stdio.h>
:这行代码包含了标准输入输出库,它允许我们使用printf
函数来打印信息。 -
函数声明:
void quickSort(int arr[], int low, int high);
这是快速排序函数的声明,它接受一个整数数组arr
和两个整数low
和high
,分别代表数组的起始和结束索引。int partition(int arr[], int low, int high);
这是分区函数的声明,它的作用是将数组分为两部分,使得左边的元素都不大于基准值,右边的元素都不小于基准值,并返回基准值的索引。void swap(int* a, int* b);
这是一个交换两个整数的函数,它接受两个整数的指针。
-
main
函数:这是程序的入口点。int arr[] = { 10,7,8,9,1,5 };
定义了一个包含整数的数组。int n = sizeof(arr) / sizeof(arr[0]);
计算数组arr
的长度。quickSort(arr, 0, n - 1);
调用quickSort
函数对整个数组进行排序。- 接下来的循环使用
printf
函数打印排序后的数组。
-
quickSort
函数:- 如果
low
小于high
,则说明还有未排序的元素,继续排序。 int pi = partition(arr, low, high);
调用partition
函数获取基准值的索引。quickSort(arr, low, pi - 1);
递归地对基准值左边的子数组进行快速排序。quickSort(arr, pi + 1, high);
递归地对基准值右边的子数组进行快速排序。
- 如果
-
partition
函数:- 选择数组最后一个元素作为基准值
pivot
。 - 使用一个索引
i
来跟踪小于等于基准值的元素的最后一个位置。 - 遍历数组,如果当前元素小于或等于基准值,则将其与
i+1
位置的元素交换,并增加i
。 - 最后,将基准值与
i+1
位置的元素交换,确保基准值左边的元素都不大于它,右边的元素都不小于它。 - 返回基准值的索引。
- 选择数组最后一个元素作为基准值
-
swap
函数:- 接受两个整数的指针
a
和b
。 - 使用一个临时变量
t
来交换a
和b
指向的值。
- 接受两个整数的指针
#include <stdio.h>
void quickSort(int arr[],int low, int high);
int partition(int arr[], int low, int high);
void swap(int* a, int* b);
int main() {
int arr[] = { 10,7,8,9,1,5 };
int n = sizeof(arr) / sizeof(arr[0]);
quickSort(arr, 0, n - 1);
printf("排序后的数组:\n");
for (int i = 0; i < n; i++) {
printf("%d", arr[i]);
printf(" ");
}
printf("\n");
return 0;
}
void quickSort(int arr[], int low, int high) {
if (low < high) {
int pi = partition(arr, low, high);
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}
int partition(int arr[], int low, int high) {
int pivot = arr[high];
int i = (low - 1);
for (int j = low; j <= high - 1; j++) {
if (arr[j] <= pivot) {
i++;
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i+1], &arr[high]);
return(i + 1);
}
void swap(int* a, int* b) {
int t = *a;
*a = *b;
*b = t;
}
结果如下: