【C语言练习】050. 编写快速排序算法

050. 编写快速排序算法

  • 050. 编写快速排序算法
    • 一、核心概念区别
    • 二、适用范围对比
      • 1. 递归的典型场景
      • 2. 分区操作的典型场景
    • 三、代码示例与解析
      • 1. 递归实现快速排序(结合分区操作)
      • 2. 纯递归操作示例(阶乘计算)
      • 3. 纯分区操作示例(内存分配)
    • 四、选择建议
    • 五、性能优化注意点
    • C语言实现快速排序
      • 代码说明
      • 示例运行
        • 输入:
        • 输出:
      • 快速排序的特点

050. 编写快速排序算法

快速排序(Quick Sort)是一种高效的排序算法,其基本思想是通过一个“分区”操作,将数组分为两部分,其中一部分的所有元素都小于另一部分的所有元素,然后递归地对这两部分进行排序。快速排序的平均时间复杂度为 O(nlogn),在实际应用中非常高效。
用C语言实现快速排序的代码,包括递归实现和分区函数。


一、核心概念区别

维度 递归 分区操作
定义 函数直接或间接调用自身的过程 将数据集合划分为多个子集的操作
目的 解决可分解为相似子问题的问题 为分治算法(如快速排序)提供数据划分
实现方式 函数嵌套调用,依赖系统栈 循环或指针操作,通常与递归结合使用
性能特点 栈空间消耗大,可能溢出 时间复杂度低(通常为O(n))

二、适用范围对比

1. 递归的典型场景

  • 分治算法:如快速排序(依赖递归调用子数组排序)
  • 树形结构操作:二叉树遍历(前序、中序、后序)
  • 数学问题:阶乘、斐波那契数列(代码简洁但效率低)
  • 动态规划问题:汉诺塔、全排列生成(状态分解)

2. 分区操作的典型场景

  • 快速排序:通过partition()函数划分基准值左右子数组
  • 快速选择算法:高效查找第k小元素(如网页3中的quickSelect()
  • 内存管理:动态分区分配中的空闲块划分(如网页9的首次适应算法)
  • 数据预处理:将数据集按特定条件划分为多个子集

三、代码示例与解析

1. 递归实现快速排序(结合分区操作)

#include 

// 分区函数(非递归操作)
int partition(int arr[], int low, int high) {
   
    int pivot = arr[high];     // 选择末尾元素为基准
    int i = low - 1;           // 小于基准的边界索引
    for (int j = low; j < high; j++) {
   
        if (arr[j] <= pivot) {
   
            i++;
            // 交换元素
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
    // 将基准放到正确位置
    int temp = arr[i+1];
    arr[i+1] = arr[high];
    arr[high] = temp;
    return i + 1;
}

// 递归排序函数
void quickSort(int arr[], int low, int high) {
   
    if

你可能感兴趣的:(从零开始学习机器人,排序算法,c语言,算法,机器人,人工智能,数据结构)