当前位置: 首页 > news >正文

快速排序算法的C++和C语言对比

快速排序算法简介:

快速排序(Quick Sort)是一种高效的排序算法,采用分治法策略。它的基本思想是:
1. 从数列中挑出一个元素作为"基准"
2. 重新排序数列,所有比基准值小的元素放在基准前面,所有比基准值大的元素放在基准后面
3. 递归地对小于基准值的子数列和大于基准值的子数列进行排序

平均时间复杂度为O(n log n),最坏情况下为O(n²),但通过优化可以避免最坏情况。


代码实现:

C++:

#include <iostream>
#include <vector>
#include <algorithm>using namespace std;int partition(vector<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++;swap(arr[i], arr[j]);}}swap(arr[i + 1], arr[high]);return i + 1;
}void quickSort(vector<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);}
}void quickSort(vector<int>& arr) {quickSort(arr, 0, arr.size() - 1);
}

C语言:

#include <stdio.h>void swap(int* a, int* b) {int t = *a;*a = *b;*b = t;
}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++;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 pi = partition(arr, low, high);quickSort(arr, low, pi - 1);quickSort(arr, pi + 1, high);}
}

样例截图:

 

思考与总结:

两种语言实现的优势比较

1. C++实现优势:
   使用vector容器,更安全且方便
   内置swap函数,代码更简洁
   支持函数重载,提供更友好的接口
   模板编程可轻松扩展为泛型实现

2. C语言实现优势:
   更底层,运行效率可能更高
   不依赖标准库以外的功能,可移植性更强
  更适合嵌入式系统等资源受限环境
  更直观地展示算法本质

分治思想将大问题分解为小问题,各个击破,这种思想在解决复杂问题时非常有效。快速排序的平均性能很好,但最坏情况性能较差,这提醒我们在设计系统时要考虑平均情况和最坏情况的平衡。 快速排序的性能很大程度上取决于基准的选择,这类似于生活中"找准关键点"的重要性。递归实现简洁优雅,展示了自相似问题的解决模式。快速排序是原地排序(除了递归栈),这提醒我们在资源利用上要尽可能高效

http://www.xdnf.cn/news/627301.html

相关文章:

  • Python实用工具:文件批量重命名器
  • Unity3D仿星露谷物语开发49之创建云杉树
  • 常见算法题目3 -反转字符串
  • 2025年—ComfyUI_最新插件推荐及使用(实时更新)
  • 保姆式一步一步制作B端左侧菜单栏
  • 游园安排--最长上升子序列+输出序列
  • 力扣:《螺旋矩阵》系列题目
  • Vant4+Vue3+Vite开发搭建教程
  • 【Redis】分布式缓存的一系列问题(持久化,主从集群,哨兵,分片集群)
  • 解决Docker容器内yum: not found、apt: not found、apk: command not found等命令找不到问题
  • 开发者工具箱-鸿蒙颜色转换器开发笔记
  • python打卡训练营打卡记录day35
  • 《算法导论(第4版)》阅读笔记:p127-p133
  • C语言 — 内存函数和数据的存储
  • 【Code Agent Benchmark】论文分享No.15:TAU-Bench
  • Windows下编译Zipios
  • 线性回归原理推导与应用(七):逻辑回归原理与公式推导
  • 解决input框被禁用后无法添加点击事件的几个方案
  • 前端大文件上传性能优化实战:分片上传分析与实战
  • 构建Harbor私有镜像库
  • MySQL--day7--聚合函数
  • 【一对一文件重命名】如何按照Excel表格文件名对应的关系,批量一对一的批量改名,一对一关联改名,如何按照映射关系一对一重命名文件夹
  • Serv00 免费邮局 搭建属于自己的域名邮箱 支持 SMTP / Catch-all
  • 电子电路:为什么导体中的电子数量能够始终保持不变?
  • NSSCTF-[羊城杯 2023]程序猿Quby
  • 【通用技巧】技术文章工业级指南:目标定位、架构设计与持续演进
  • PINN高阶技术综合应用:复杂问题求解与神经算子进阶
  • NV123NV134美光闪存颗粒NV139NV143
  • 52页 @《人工智能生命体 新启点》中國龍 原创连载
  • 详细设计文档怎么写?@附参考原件