首页 > 其他分享 >快速排序

快速排序

时间:2024-03-11 21:44:18浏览次数:24  
标签:分割 数列 int 整数 数组 排序 快速

快排属于分治算法;

思想:

快排的思想是分治
我们有一个待排序的数组,长度为n。选定一个基准,将数组分成左右两部分,左边的数小于基准,右边的数大于基准。
然后我们分别看分割后左右两部分数组,如果元素个数大于1,就再次分割。
直到最后,我们得到了n个数组,每个数组含有1个元素。
这n个数组中,每两个挨着的,都是排好序的,所以整体有序。
最好情况下,每次将原来的数组分成两份,第二次将两份成四份....最后一个元素一份。每次分割是O(n),
假设分割次数为k,则2的k次方等于n,k = logn。每次分割的总时间复杂度是O(n),所以说,平均复杂度是O(n*logn)。
最坏就是原数组有序,每次只能分割开1个元素,需要分割n次,时间复杂度是O(n^2)。
作者:Hasity
链接:https://www.acwing.com/solution/content/148966/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

给定你一个长度为 n的整数数列。
请你使用快速排序对这个数列按照从小到大进行排序。
并将排好序的数列按顺序输出。
输入格式
输入共两行,第一行包含整数 n
第二行包含 n
个整数(所有整数均在 1∼109
范围内),表示整个数列。
输出格式
输出共一行,包含 n
个整数,表示排好序的数列。
数据范围
1≤n≤100000
输入样例:
5
3 1 2 4 5
输出样例:
1 2 3 4 5

#include<iostream>
using namespace std;
int n;
const int N = 100010;
int q[N];
void quick_sort(int q[],int l,int r){
    if(l>=r) return;
    int x = q[(l + r)/2];
    int i = l - 1,j = r + 1;
    while(i<j){
        do(i++);while(q[i]<x);
        do(j--);while(q[j]>x);
        if(i<j) swap(q[i],q[j]);
    }
    quick_sort(q,l,i- 1);
    quick_sort(q,i,r);
}
int main(){
    scanf("%d",&n);
    for(int i = 0;i<n;i++) scanf("%d",&q[i]);
    quick_sort(q,0,n - 1);
    for(int i = 0;i<n;i++) printf("%d ",q[i]);    
    return 0;
}

标签:分割,数列,int,整数,数组,排序,快速
From: https://www.cnblogs.com/Isaiah2018/p/18067135

相关文章

  • 排序链表(自底向上归并排序)
    题目:时间复杂度:O(nlogn),空间复杂度:O(1)structListNode{intval;ListNode*next;ListNode():val(0),next(nullptr){}ListNode(int_val):val(_val),next(nullptr){}ListNode(int_val,ListNode*_next):val(_val),next(_next){}};class......
  • pandas - 数据排序
    sort_values()函数importpandasaspddata={'名称':['太阳能','床','风扇','沙发'],'单价':[2000,3500,500,3500],'数量':[58,23,69,60]}df=pd.DataFrame(data)#单条件排序,使......
  • PW2058降压芯片:3.7V至3V快速转换,低功耗设计,外围电路简洁
    概述:在便携式设备日益普及的今天,高效、稳定的电源管理成为了关键。PW2058作为一款恒频、电流模式降压转换器,以其出色的性能和广泛的应用范围,成为了市场上备受瞩目的产品。它集成了主开关和同步整流器,无需额外添加肖特基二极管,即可实现高达96%的效率,为单电池锂离子电池供电的便携......
  • MySQL分组之后按照固定顺序排序 FIELD
    以下回答来自通义千问:要按照特定顺序显示type字段的统计结果,MySQL并没有提供直接按指定顺序进行GROUPBY的方法。但是,你可以结合ORDERBY语句和FIELD()函数来实现这一需求。FIELD()函数可以将某个字段的值与一系列指定值进行比较,并按照指定值的顺序排序。假设你希望固定的type顺......
  • 快速掌握AI测试开发技能,获得更好的职业机会和晋升空间
    随着人工智能在各行各业的广泛应用,学习并掌握AI技术在软件测试中的应用变得至关重要。不仅能使你跟上行业的发展趋势,还能提升你的竞争力。而且,市场对具备AI测试技能的测试工程师的需求正日益增长,这使得掌握这些技能能够帮助你获得更好的职业机会和升职机会。在测试工作中,通过应用......
  • docsify快速部署搭建个人知识库
    1.docsify介绍与文档1.1基本介绍Docsify即时生成您的文档网站。与GitBook不同,它不会生成静态html文件。相反,它会智能地加载和解析您的Markdown文件,并将它们显示为网站。没有静态构建的html文件简单轻便智能全文搜索插件多个主题有用的插件接口表情符号支持与......
  • 中考英语首字母快速突破001-2021上海崇明英语二模
    中考英语首字母快速突破001-2021上海崇明英语二模PDF格式公众号回复关键字:ZKSZM002原文​Whichismoreimportanttoourlives,theInternetorthewashingmachine?Manyofusmightanswer,"TheInternet!"TheInternethelpsusgatherinformation.It......
  • kubernetes快速入门之K3S
    kubernetes简介Kubernetes是一个开源的容器编排引擎和容器集群管理工具,用来对容器化应用进行自动化部署、扩缩和管理。Kubernetes这个名字源于希腊语,意为“舵手”或“飞行员”。k8s这个缩写是因为k和s之间有8个字符。Google在2014年开源了Kubernetes项目。优势......
  • 153. 寻找旋转排序数组中的最小值(中)
    目录题目题解:二分题目已知一个长度为n的数组,预先按照升序排列,经由1到n次旋转后,得到输入数组。例如,原数组nums=[0,1,2,4,5,6,7]在变化后可能得到:若旋转4次,则可以得到[4,5,6,7,0,1,2]若旋转7次,则可以得到[0,1,2,4,5,6,7]注意,数组[a[0],a[1],a[2],...,a......
  • MySQL基础篇快速记忆和查询
    查询语法:SELECT标识选择哪些列FROM标识从哪个表中选择去重(Distinct)在SELECT语句中使用关键字DISTINCT去除重复行SELECTDISTINCTdepartment_idFROMemployees;过滤(Where)语法:SELECT字段1,字段2FROM表名WHERE过滤条件使用WHERE子句,将不满足条......