——快速排序

快速排序

基本思路

选取中间位置为基准从两边开始遍历,(这里以从小到大为例)左边·遇到第一个大于基准数的记录下标,右边遇到第一个小于基准数的记录下标,然后交换这两个数,重复以上操作直至到达中间位置(***说明一下为啥选取中间位置为基准,假如选取第一位数为基准,假如右边的都比他小,运算量增大,这样时间复杂度会变高)***然后,以基准数为分界线,将区间分成两部分,每个区间重复以上操作。

以洛谷P1177 【模板】排序为例

将读入的 N 个数从小到大排序后输出。

输入格式

第一行为一个正整数 N

第二行包含 N 个空格隔开的正整数 a i,为你需要进行排序的数。

输出格式

将给定的 N 个数从小到大输出,数之间空格隔开,行末换行且无空格。

若不选取中间数为基准便会超时。

代码如下:

#include<bits/stdc++.h>

using namespace std;

const int N=1e6+30;

int kN;

void kp(int l,int r)

{

if(l>r)return ;//排序完成结束条件

int re=r,le=l;

int te=k(r+l)/2;//选取基准数

while(le<=re)

{

while(kle<te)le++;

while(kre>te)re--;

if(le<=re)

{

swap(kle,kre);

le++;re--;

}

}

kp(l,re);

kp(le,r);

}

int main()

{

int n;cin>>n;

for(int i=0;i<n;i++)

cin>>ki;

kp(0,n-1);

for(int j=0;j<n-1;j++)

cout<<kj<<" ";

cout<<kn-1<<endl;

return 0;

}

相关推荐
Benny_Tang12 小时前
题解:P10230 [COCI 2023/2024 #4] Lepeze
c++·算法
Geek-Chow12 小时前
06 训练管线:数据如何变成权重
人工智能·算法
我变成萤火虫13 小时前
反悔贪心(经典题目讲解)
c++·算法·贪心算法·stl·排序算法·反悔贪心
_Narcissus_13 小时前
排序算法总结表格
c语言·数据结构·c++·笔记·算法·排序算法·总结
一只小小的芙厨14 小时前
前缀和与差分
数据结构·算法
船厂电气自动化ai大模型14 小时前
AI大模型与数学第42课:泰勒级数完整展开(神经网络近似核心)
人工智能·python·深度学习·算法·机器学习
从琳开始98915 小时前
优选算法——双指针(算法原理+力扣题)
算法·leetcode·职场和发展
从琳开始98915 小时前
优选算法——滑动窗口(概念+解题模板+LeetCode例题讲解)
算法·leetcode·职场和发展
Nil20815 小时前
leetcode 94二叉树的中序遍历
算法·leetcode·职场和发展
兔兔兔兔115 小时前
记录C++ 8
开发语言·c++