分治与递归--快速排序
题目描述
实现快速排序算法
参考输入、输出:
输入:输入第一行包括一个整数n,第二行包含n个整数,以空格间隔。
输出:输出一行n个整数,代表排序结果。
Simple input:
4
1 5 4 12
Simple output:
1 4 5 12
题目思路
时间复杂度
题目代码
#include <iostream>
using namespace std;
const int N = 1e5;
int n;
int a[N], b[N];
int Partition(int a[], int p, int r)
{
int i = p, j = r + 1;
int t;
int x = a[p]; //a[p]做划分基准
// 将数据分为二部分:左边的元素<=x, 右边的元素>x,x放中间。
while(1)
{
while(a[++ i] <= x && i < r) ; //从左向右找>x的数的位置下标i,找不到时i==r
while(a[-- j] > x) ; //从右向左找<=x的数的位置下标j,找不到时j==p
if(i >= j) break; //一遍扫描结束, 退出循环
t = a[i];
a[i] = a[j];
a[j] = t;
}
a[p] = a[j]; //首元素a[p]与a[j] 交换
a[j] = x; //x放在分界点
return j; //j是分裂位置
}
void QuickSort(int a[], int p, int r)
{
if(p < r){
int q = Partition(a, p, r);
QuickSort(a, p, q - 1); // 对左半段排序
QuickSort(a, q + 1, r); // 对右半段排序
}
}
int main()
{
cin >> n;
for(int i = 1; i <= n; i ++ )
cin >> a[i];
QuickSort(a, 1, n);
for(int i = 1; i <= n; i ++ )
cout << a[i] << " ";
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下