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

快速排序算法的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.lryc.cn/news/2385208.html

相关文章:

  • 分布式事务知识点整理
  • 微信小程序数据接收
  • 鸿蒙UI开发——badge角标的使用
  • 批量打印的趣事
  • 车载中央域控制器测试【BCM模块介绍-外灯3】
  • Linux系统基础——是什么、适用在哪里、如何选
  • MySQL与Oracle六大方面之比较
  • 二层和三层交换机的概念
  • 计算机网络学习20250524
  • 无损图片压缩 本地处理 批量处理提升效率 无需联网+无广告
  • C++标准库中 std::string 类提供的 insert 成员函数的不同重载版本
  • Qt window frame + windowTitle + windowIcon属性(3)
  • 解决:VMware 虚拟机 Ubuntu 系统共享文件夹无法访问问题
  • Dify源码学习
  • 静态网站部署:如何通过GitHub免费部署一个静态网站
  • 【拯救小狗】2022-1-3
  • PS2025 v26.7 Photoshop2025+AI生图扩充版,支持AI画图
  • 怎么开发一个网络协议模块(C语言框架)之(三) 全局实例
  • ShenNiusModularity项目源码学习(30:ShenNius.Admin.Mvc项目分析-15)
  • 香港维尔利健康科技集团全面推进AI医疗落地,构建智慧健康管理新模式
  • 在 .NET 环境下实现跨进程高频率读写数据
  • Arduino和STM32的区别详解
  • 选择合适的Azure数据库监控工具
  • bi软件是什么?bi软件是做什么用的?
  • DeepSeek 赋能智能电网:从技术革新到全场景应用实践
  • xdvipdfmx:fatal: File ended prematurely. No output PDF file written.
  • python进行while遍历的常见错误解析
  • 锐化算子构建方法(机翻)
  • GO语言学习(七)
  • 算法中的数学:费马小定理