| 
 | 
 
 
发表于 2023-12-15 09:56:45
|
显示全部楼层
 
 
 
 
抱歉,我之前意外地截断了代码。让我们来修复一下: 
 
- #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[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 quickSort(int arr[], int low, int high) {
 
 -     if (low < high) {
 
 -         // 划分数组,并获取基准元素的索引
 
 -         int pivotIndex = partition(arr, low, high);
 
 -         
 
 -         // 对基准元素的左侧子数组进行快速排序
 
 -         quickSort(arr, low, pivotIndex - 1);
 
 -         
 
 -         // 对基准元素的右侧子数组进行快速排序
 
 -         quickSort(arr, pivotIndex + 1, high);
 
 -     }
 
 - }
 
  
- int main() {
 
 -     int arr[] = {5, 2, 8, 9, 1, 3};
 
 -     int n = sizeof(arr) / sizeof(arr[0]);
 
 -     
 
 -     printf("排序前的数组:");
 
 -     for (int i = 0; i < n; i++) {
 
 -         printf("%d ", arr[i]);
 
 -     }
 
 -     
 
 -     quickSort(arr, 0, n - 1);
 
 -     
 
 -     printf("\n排序后的数组:");
 
 -     for (int i = 0; i < n; i++) {
 
 -         printf("%d ", arr[i]);
 
 -     }
 
 -     
 
 -     return 0;
 
 - }
 
  复制代码 
 
执行结果是: 
排序前的数组:5 2 8 9 1 3 
排序后的数组:1 2 3 5 8 9 
 
这段代码实现了快速排序算法,它通过选择基准元素并将数组划分为两个子数组来对数组进行排序。具体来说,它首先选择最后一个元素作为基准,并将数组中小于等于基准的元素放在基准的左边,大于基准的元素放在基准的右边,然后递归地对基准元素两侧的子数组进行排序。最终,数组就会被完全排序。在上述示例中,我们使用{5, 2, 8, 9, 1, 3}作为初始数组进行排序。 
 
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |   
 
 
 
 |