C语言设计出(冒泡排序、快速排序和归并排序)的递归排序算法;对数组中的数据进行排序(按从小到大的顺序排序);
时间: 2024-09-29 08:05:16 浏览: 36
C语言中的三种常见排序算法——冒泡排序、快速排序和归并排序,都可以通过递归方式进行实现。
1. **冒泡排序递归**:
冒泡排序通常不是通过递归来直接实现的,因为其效率不高且不适合大规模数据。不过,可以尝试一种简化版的思路,对于小规模的数据,可以用递归完成,但如果找到有序,则提前结束。以下是示例:
```c
void bubbleSortRecursive(int arr[], int n) {
if (n == 1)
return;
if (arr[n - 1] < arr[0])
swap(&arr[n - 1], &arr[0]);
for (int i = 1; i < n - 1; ++i) {
if (arr[i] > arr[i + 1])
swap(&arr[i], &arr[i + 1]);
}
bubbleSortRecursive(arr, n - 1);
}
```
2. **快速排序递归**:
快速排序的核心思想是分治,通过选取基准值将数组分为两部分,然后对每一部分递归地排序。这里给出一个基本的版本:
```c
void quickSortRecursive(int arr[], int low, int high) {
if (low < high) {
int pivot = partition(arr, low, high); // 分区函数确定基准位置
quickSortRecursive(arr, low, pivot - 1); // 对左半部分递归排序
quickSortRecursive(arr, pivot + 1, high); // 对右半部分递归排序
}
}
```
3. **归并排序递归**:
归并排序采用的是稳定的合并策略,同样基于分治。首先将数组一分为二,然后递归处理每个子数组,最后合并它们:
```c
void mergeSortRecursive(int arr[], int left, int right) {
if (left < right) {
int mid = left + (right - left) / 2;
mergeSortRecursive(arr, left, mid);
mergeSortRecursive(arr, mid + 1, right);
merge(arr, left, mid, right);
}
}
void merge(int arr[], int left, int mid, int right) { ... } // 合并两个已排序的部分
```
阅读全文