用指针传参对数组排序
时间: 2024-10-14 22:09:27 浏览: 34
使用指针作为参数在C语言中传递数组给函数进行排序非常常见,特别是当你不希望复制整个数组时,因为指针可以指向原始数据,从而节省内存。这里我们介绍如何使用常见的快速排序算法(quicksort)为例,它通常接受数组的起始地址(首元素的指针)和大小作为参数。
**快速排序函数示例**:
```c
#include <stdio.h>
// 快速排序函数
void quicksort(int* arr, int low, int high) {
if (low < high) {
// 找到分割点
int pivot = partition(arr, low, high);
// 对左右两部分递归调用
quicksort(arr, low, pivot - 1);
quicksort(arr, pivot + 1, high);
}
}
// 分割函数,找到数组中间的值并返回其索引
int partition(int* arr, int low, int high) {
int pivot_value = arr[high];
int i = (low - 1); // 小于基准的元素的最后一个
for (int j = low; j <= high - 1; j++) {
if (arr[j] < pivot_value) {
i++;
// 交换arr[i]和arr[j]
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
// 将基准值放在正确的位置
arr[i + 1] = pivot_value;
return i + 1;
}
int main() {
int arr[] = {9, 7, 5, 11, 12, 2};
int n = sizeof(arr) / sizeof(arr[0]);
printf("Original array: ");
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
quicksort(arr, 0, n - 1);
printf("\nSorted array: ");
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
return 0;
}
```
在这个例子中,`quicksort`函数接收一个整型指针`arr`,以及两个整数`low`和`high`,表示数组的范围。`partition`函数则是快速排序的核心,通过比较操作找到分区点。
**相关问题--:**
1. 指针有什么作用,在函数间传递数组时为何常用指针?
2. 除了快速排序,还有哪些常用的排序算法可以用指针实现?
3. 如何确保在递归调用过程中指针不会丢失?
4. 这个排序过程的时间复杂度是多少?
阅读全文