使用c语言如何使用快速排序算法对一个包含10个整数的列表进行排序?
时间: 2024-12-06 20:26:18 浏览: 16
在C语言中,快速排序是一种常用的高效排序算法,通过分治法将数组划分为较小和较大的两部分,然后递归地对这两部分进行排序。以下是基本的步骤:
1. **选择基准元素**:通常选择第一个元素作为基准,也可以随机选取。
2. **划分**:
- 如果 `arr[low]` 大于等于基准,将 `low` 向右移动一位。
- 如果 `arr[high]` 小于基准,将 `high` 向左移动一位。
- 当 `low` 和 `high` 指向的值交换后,基准就位于了正确的位置,完成了分区。
3. **递归**:
- 对 `low` 到 `high-1` 的子数组和 `high+1` 到数组尾部的子数组分别递归应用上述过程。
4. **合并结果**:由于每次划分都会将数组分为更小的部分,最终会剩下已经排序好的两部分。
下面是一个简单的快速排序函数示例,假设有一个名为 `nums` 的数组存放10个整数:
```c
#include <stdio.h>
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
int partition(int arr[], int low, int high) {
int pivot = arr[low];
while (low < high) {
while (low < high && arr[high] >= pivot)
high--;
if (low < high)
arr[low++] = arr[high];
while (low < high && arr[low] < pivot)
low++;
if (low < high)
arr[high--] = arr[low];
}
arr[low] = pivot;
return low;
}
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 main() {
int nums[] = {5, 2, 9, 1, 7, 6, 8, 3, 4, 10};
int n = sizeof(nums) / sizeof(nums[0]);
quicksort(nums, 0, n - 1);
for (int i = 0; i < n; i++) {
printf("%d ", nums[i]);
}
return 0;
}
```
运行这个程序后,`nums` 数组就会按照升序排列。
阅读全文