根据算法导论写的快速排序

算法导论(一):快速排序与随机化快排 快速排序用到了分治思想,同样的还有归并排序。乍看起来快速排序和归并排序非常相似,都是将问题变小,先排序子串,最后合并。不同的是快速排序在划分子问题的时候经过多一步处理,将划分的两组数据划分为一大一小,这样在最后合并的时候就不必像归并排序那样再进行比较。但也正因为如此,划分的不定性使得快速排序的时间复杂度并不稳定。 阅读详情

算法导论上面说在选取基准元素是取得最后一个,数据结构课本上面是取第一个;

不过没有原理都是一样的;通过Qartion(int a[],int l,int r)函数将数组a中元素划分为三部分,比a[r]小的,比a[r]大的,a[r];

最后返回基准元素所在的位置;

#include <stdio.h>
#include <iostream>
#include <string.h>
#include <algorithm>
#include <math.h>
using namespace std;
 const int N=99;
  int Qartion(int a[],int l,int r)
 {
  int tmp=a[r];
   int i=l-1;
   for(int j=l;j<=r-1;j++)
   {
    if(a[j]<=tmp)
	{
	 i++;
	 swap(a[i],a[j]);
	}
   }
   swap(a[i+1],a[r]);
   return i+1;
 }
 void Qsort(int a[],int l,int r)
 {
  if(l<r)
  {
    int p=Qartion(a,l,r);
	Qsort(a,l,p-1);
	Qsort(a,p+1,r);
  }
 }
 int main()
 {
      int n;
	  while(~scanf("%d",&n))
	  {
	     int a[100];
		 for(int i=0;i<n;i++)
		 {
		  cin>>a[i];
		 }
		 Qsort(a,0,n-1);
		 for(int i=0;i<n;i++)
		 {
		  cout<<a[i]<<" ";
		 }
		 cout<<endl;
	  }
	 return 0;
 }


《算法导论》第 7 章 - 快速排序 本文系统讲解了快速排序算法,包括其分治思想、划分操作和性能分析。快速排序通过选择基准元素将数组划分为两部分递归排序,平均时间复杂度为O(nlogn),但最坏情况下可能达到O(n^2)。文章提供了标准快速排序和随机化版本的C++实现,并讨论了优化策略:对于小数组可改用插入排序;对于重复元素可采用三路快速排序。快速排序因其优秀的平均性能和原地排序特性,成为实际应用中最常用的排序算法之一。文章还分析了算法的时间复杂度和空间复杂度,并给出了代码实现示例,帮助读者深入理解这一经典算法。 阅读详情

相关推荐

《算法导论》第7章 快速排序 (四种变形)

这一章的正文及思考题部分讲到了快速排序及其几种变形,包括:Hoare快排, 普通快排,随机快排,三数取中快排。 这些快排的区别主要是划分方法PARTITION算法的不同:如何选取主元,划分出的 两部分范围是什么。根据划分出的范围不同,各变形的QUICKSORT有微小的差别。 1. Hoare快排 Hoare划分是最初的版本,与《算法导论》中的划分版本相比,

西代零零发 4653

快速排序法

今天介绍快速排序,这也是在实际中最常用的一种排序算法,速度快,效率高。就像名字一样,快速排序是最优秀的一种排序算法。 思想 快速排序采用的思想是分治思想。 快速排序是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n

gcs的博客 4513

【算法导论】之快速排序深度分析

前言 最近学习了算法导论上的快速排序部分,有不少体会。 今天就来分享一下。在此欢迎大家批评指正文中的错误。 目录索引前言快速排序正文1.快速排序的优点2.快排的原理及实现3.快排的性能分析快排的几种优化方式1.主元的随机化选取2.三数取中3.减小递归的栈深度——小区间优化4.其他优化方法 快速排序 正文 1.快速排序的优点 说起快速排序,它的名字就显现出快排最大的优点————快。到底有多快呢?咱们用数据说话: 综合一般情况来说,快排确实有(亿点快)。特别是对较大数据量的排序。 快速排序的综合时间复杂度是O

程序员白菜 1760

算法导论-快速排序算法-Java实现

快速排序:使用分治策略,将数组按照比较值分类到两边,递归后,再进行分类到两边,比较简单,直接上代码:public class QuickSort { public static void sort(int[] arr,int left,int right){ if(right&gt;left){ int mid=partion(arr,left,right); sort(arr...

rickygacheo的博客 302

Chromatix 7实战:从零开始调优ISP模块的完整流程(附常见报错解决方案)

本文提供了高通平台Camera调试工具Chromatix 7的完整实战指南。详细阐述了从环境准备、项目初始化、基础校正(如LSC、BPC)到核心ISP管线(Demosaic、CCM、HDR)及后处理(CAC、ANR)的调优全流程,并附带了常见报错(如“未初始化实例”)的解决方案,旨在帮助工程师建立系统性的调试方法论。

weixin_29290863的博客 623

从三极管到MOS管:单片机I/O口驱动电路设计实战解析

本文深入解析了从三极管到MOS管的单片机I/O口驱动电路设计实战经验。通过对比三极管与MOS管的本质区别,结合实际案例详细讲解了驱动电路的设计要点、优化技巧及常见问题解决方案,帮助工程师高效完成各类负载驱动设计。

weixin_29161785的博客 322

《算法导论的Java实现》 8 快速排序

《算法导论的Java实现》 8 快速排序

chen09的专栏 3721

afe模拟前端的重要性_高性能模拟前端信号链解决方案如何助力医疗超声系统发展...

1942年,奥地利TDussik使用A型超声成像系统穿透性探测颅脑,并于1949年获得头部的超声图像,此举昭示超声系统进入到医疗领域。直到如今,超声系统作为用于人体内部的无创可视化技术,被广泛用于医疗领域。最近一份报告称到2022年,中国医疗超声诊断仪器行业的市场规模预计将达到15.8亿美元,保持6%左右的年均增长率。高性能模拟信号链前端是超声设备的关键组成部分,作为高性能模拟技术主要的提供商AD...

weixin_28799111的博客 1089

《算法导论》学习总结 — 6.第七章 快速排序

推荐先看看前言:http://www.cnblogs.com/tanky_woo/archive/2011/04/09/2010263.html其实这一篇我老早就写过了,只不过最近在总结《算法导论》,而第七章就是快速排序,我当初总结的快排也是根据算法导论来的,为了方便大家阅读,我在这里把曾经写过的重新再贴一遍。 前几天写过一个堆排序的文章(http://www.wutianqi.com/?p=...

weixin_30881367的博客 99

军品研制过程-转阶段

介绍军品转阶段评审

Abel的博客 2万+

安卓刷Windows太难?这款手机平板双系统刷机工具,小白也能轻松拿捏!(小白福音!手机平板专用,一键搞定安卓刷 Windows 双系统!)

安卓刷Windows太难?这款手机平板双系统刷机工具,小白也能轻松拿捏!(小白福音!手机平板专用,一键搞定安卓刷 Windows 双系统!)

XiaoqiangClub的博客 4683

算法导论第七章:快速排序的艺术与科学

本文是《算法导论》精讲专栏第七章,通过**分治策略可视化**、**性能对比实验**和**工程优化技巧**,结合完整C语言实现,深入解析快速排序的精髓。包含基本实现、随机化优化、三向切分、尾递归消除等高级技术,提供10个以上完整代码实现。

SEU123WW的博客 1333

perl 安装DBI和DBD

还可以从cpan.perl.org站点下载tar压缩文件形式的源代码发行版本,解压缩后,切换到相应的文件目录 cd DBI-1.54 perl Makefile.PL make make test make install 安装DBD时候 需要export ORACLE_HOME 验证安装: perldoc DBD::Oracle perldoc DBI 在线文档; perldoc -m

zhaoyangjian724的专栏 1754

快速排序的四种python实现

快速排序算法,简称快排,是最实用的排序算法,没有之一,各大语言标准库的排序函数也基本都是基于快排实现的 本文用python语言介绍四种不同的快排实现 1. 一行代码实现的简洁版本 quick_sort = lambda array: array if len(array) array[0]]) 2. 网上常见的快排实现 def quick_sort(array, left

Razor87的专栏 10万+

基于模糊神经网络实现水质评价预测 - Matlab源码

首先定义输入层、隐含层和输出层的节点数,并初始化权重和阈值,然后开始训练模型,在每轮训练中通过比较模型的输出值与实际值的误差来更新权重和阈值,直到误差达到最小值,为了提高模型的性能,我们可以采用交叉验证等技术进行优化。首先需要准备好数据集,使用的是嘉陵江的水质监测数据集,数据集包含了多个指标,如 pH 值、溶解氧、总氮、总磷等,以及相应的水质等级,我们需要将数据集分为训练集和测试集。在当今环境日益恶化的情况下,水质监测变得越来越重要,模糊神经网络作为一种新型的。

weixin_50547796的博客 147

【Claude Code 源码解析教程】总体大纲

本教程旨在深入解析 Anthropic Claude Code 项目的源码架构和实现细节。Claude Code 是一个基于 TypeScript + Bun 构建的 AI 编程助手 CLI 工具,代号 "Tengu",具有复杂的多模块架构和丰富的功能特性。本教程基于Claude Code 的源码分析来生成,将帮助您全面掌握 Claude Code 的源码架构和实现细节,为开发类似 AI 编程助手工具奠定坚实基础。

rengang66的博客 388

算法导论实践——快速排序

算法导论实践——快速排序理论C# 实现FastSortUtilProgram 在学习算法导论之前,一直对快速排序有很大的畏惧感。还记得当时教我们数据结构的老师就硬给我们讲一堆算法,其中快速排序是真的叫我头疼。当时的感觉就是 我只看到了第一层,老师却在第五层 理论 分解:依据一个关键值(Pivot),把原数组分解成为两个子数组。其中一个子数组全部元素小于等于Pivot(后文称小数组)在Pivo...

不定期更新系统使用、编程小技巧,哔哩哔哩账号:https://space.bilibili.com/399455629,欢迎关注 326

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

算法导论 第7章 快速排序

一、概念 快速排序是基于分治模式的,选择一个数作为主元,经过一遍扫描,所有小于主元的数放在主元的左边,大于主元的数放在主元的右边,这样就划分成了两组数据。然后对两组数分别进行快排。 快排的运行时间与划分是否对称有关,关键是如何选择主元。 最坏情况下,时间复杂度是O(n^2),最好情况下,时间是O(nlgn) 二、程序 #include using namespace std;

幸福在路上 8220

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

算法导论第七章-快速排序-Cpp代码实现

实现了算法导论第七章中的快速排序

YY的博客 860

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

《算法导论》伪代码C++实现--快速排序

《算法导论》第7章快速排序 /** * 快速排序 */ #include <bits/stdc++.h> using namespace std; int partition(int A[], int p, int r){ int i = p-1; for (int j = p; j <= r-1; ++j) { if (A[j] <...

edestiny1的博客 782

算法导论-7-2 针对有相同元素值的快速排序

题目详见算法导论7-2习题,

u013252593的专栏 6035

《算法导论》第三版第7章 快速排序 练习&思考题 个人答案

7.1 快速排序的描述 7.1-1 解: 13, 19, 9, 5, 12, 8, 7, 4, 21, 2, 6, 11 9, 19, 13, 5, 12, 8, 7, 4, 21, 2, 6, 11 9, 5, 13, 19, 12, 8, 7, 4, 21, 2, 6, 11 9, 5, 8, 19, 12, 13, 7, 4, 21, 2, 6, 11 9, 5, 8, 7, 12, 13,...

张劲声的博客 1853

算法导论——关于快速排序的实现(c语言实现)

在算法导论的第七章,介绍了有关快速排序的算法。该算法其实是分治算法的一种。 分:将数组中的元素分成两部分和一个pivot; 治:递归的对两个子数组进行排序; 合:此时将数组遍历输出即可; 书中介绍的算法的主要思想如下: 1、首先将数组的第一个元素作为pivot,然后顺序的遍历该数组,将小于pivot的元素同当前位置的下一个位置的元素交换; 2、该过程直到遍历到数组最后一个元素为止,最终

u011746585的专栏 470

快速排序的若干源码剖析(包括JAVA、Qt、算法导论)

 快排:快速排序,难度不是太大,但是是我经常把玩的小代码之一,引用快排代码创始人的一句话“要不是简练又明显没有错误,要不是复杂没有明显的错误” 起因:主要是前一阵看刘汝佳的《算法艺术与信息学竞赛》P73页,碰巧我又亲手写了一遍那书上的测试了一下,发现竟然是错误的,然后我又测试了一下我以前写的快排的代码,发现也是错误的ORZ。然后我就翻了一下能找到的快排的源码。包括Qt、JAVA、算法导

1259

算法导论:快速排序 c++

来自算法导论第七章:快速排序 1. 算法描述 快速排序(quick-sort)与前面介绍的归并排序(merge-sort)(见算法基础——算法导论(1))一样,使用了分治思想。下面是对一个一般的子数组A[p~r]进行快速排序的分治步骤: ①分解:数组A[p~r]被划分为两个子数组A[p~q]和A[q+1~r],使得A[q] 大于等于 A[p~q] 中的每个元素,且小于等于 A[q+1~r] 中的每个元素。(需要注意的是, A[p~q] 和 A[q+1~r] 可能为空) ②解决:对子数组...

LIJIWEI0611的博客 914
上一篇: 2012多校联合2&&1001 hero 贪心
下一篇: hdu1596floyd就能过数据太水
Java_beginer1
博客等级 码龄16年 22粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值