#include <stdio.h>void swap(int arr[], int i, int j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp;}void quick_sort(int arr[], int left, int right) { if (left >= right) return; // 递归结束条件 int i = left, j = right, pivot = arr[left]; while (i < j) { while (i < j && arr[j] >= pivot) j--; if (i < j) { swap(arr, i, j); i++; } while (i < j && arr[i] < pivot) i++; if (i < j) { swap(arr, i, j); j--; } } quick_sort(arr, left, i - 1); quick_sort(arr, i + 1, right);}int main() { int n; scanf("%d", &n); int arr[n]; for (int i = 0; i < n; i++) { scanf("%d", &arr[i]); } quick_sort(arr, 0, n - 1); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } return 0;}每一行解析
时间: 2024-04-03 19:34:02 浏览: 123
这是一个 C 语言程序,实现了快速排序算法。下面逐行解析程序:
1. #include <stdio.h>
包含标准输入输出头文件。
2. void swap(int arr[], int i, int j) {
定义了一个名为 swap 的函数,用于交换数组 arr 中下标为 i 和 j 的元素。
3. int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
实现了 swap 函数的功能,即交换 arr[i] 和 arr[j] 的值。
4. void quick_sort(int arr[], int left, int right) {
定义了一个名为 quick_sort 的函数,用于实现快速排序算法。
5. if (left >= right) return;
如果 left 大于等于 right,即数组长度为 0 或 1,直接返回。
6. int i = left, j = right, pivot = arr[left];
定义了三个变量:i 和 j 分别表示左右指针,pivot 表示基准元素,初始值为数组 arr 的第一个元素。
7. while (i < j) {
用 while 循环实现快速排序算法的核心部分。
8. while (i < j && arr[j] >= pivot) j--;
从右往左找到第一个小于 pivot 的元素,将其下标保存在 j 中。
9. if (i < j) {
swap(arr, i, j);
i++;
}
如果 i 小于 j,即找到了一个小于 pivot 的元素,将其与 arr[i] 交换位置,并将 i 自增。
10. while (i < j && arr[i] < pivot) i++;
从左往右找到第一个大于等于 pivot 的元素,将其下标保存在 i 中。
11. if (i < j) {
swap(arr, i, j);
j--;
}
如果 i 小于 j,即找到了一个大于等于 pivot 的元素,将其与 arr[j] 交换位置,并将 j 自减。
12. quick_sort(arr, left, i - 1);
递归调用 quick_sort 函数,对左半部分进行快速排序。
13. quick_sort(arr, i + 1, right);
递归调用 quick_sort 函数,对右半部分进行快速排序。
14. int main() {
程序的主函数。
15. int n;
scanf("%d", &n);
输入数组的长度。
16. int arr[n];
定义一个长度为 n 的数组 arr。
17. for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
输入数组的元素。
18. quick_sort(arr, 0, n - 1);
对数组 arr 进行快速排序。
19. for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
输出排好序的数组元素。
20. return 0;
程序正常结束。
阅读全文