快速排序2

算法:

1、从数列中挑出一个元素,称为 "基准"(pivot),

2、重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。

3、递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

07.void QuickSort(int *arr, int left, int right)  
08.{  
09.  int i,j;  
10.  if(left<right)  
11.  {  
12.    i=left;j=right;  
13.    arr[0]=arr[i]; //准备以本次最左边的元素值为标准进行划分,先保存其值  
14.    do  
15.    {  
16.      while(arr[j]>arr[0] && i<j)   
17.        j--;        //从右向左找第1个小于标准值的位置j  
18.      if(i<j)                               //找到了,位置为j  
19.      {   
20.        arr[i] = arr[j];  
21.        i++;  
22.      }           //将第j个元素置于左端并重置i  
23.      while(arr[i]<arr[0] && i<j)  
24.        i++;      //从左向右找第1个大于标准值的位置i  
25.      if(i<j)                       //找到了,位置为i  
26.      {   
27.        arr[j] = arr[i];  
28.        j--;  
29.      }           //将第i个元素置于右端并重置j  
30.    }while(i!=j);  
31.    arr[i] = arr[0];         //将标准值放入它的最终位置,本次划分结束  
32.    quicksort(arr, left, i-1);     //对标准值左半部递归调用本函数  
33.    quicksort(arr, i+1, right);    //对标准值右半部递归调用本函数  
34.  }  
35.}  

 

转载于:https://www.cnblogs.com/yl-saber/p/6933534.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/416618.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习(2442):解决跨域问题

1.同源策略如下&#xff1a; URL说明是否允许通信http://www.a.com/a.js http://www.a.com/b.js同一域名下允许http://www.a.com/lab/a.js http://www.a.com/script/b.js同一域名下不同文件夹允许http://www.a.com:8000/a.js http://www.a.com/b.js同一域名&#xff0c;不同端…

idea2020.03 lombok异常

提示找不到lombok生成的那些getter和setter方法。 解决办法 插件lombok升级到最新版本&#xff0c;不行就卸载安装下&#xff0c;当前版本为0.32-EAP 项目依赖的lombok升级到1.18.16版本。 File——Invalidate Cache / Restart&#xff08;清除IDEA缓存&#xff0c;重启&#x…

【bzoj3224】普通平衡树——treap

我的第一道treap题目&#xff0c;treap的模版题。 代码是对着hzw的敲的&#xff0c;一边敲一边理解。。。 主要是熟悉一下treap的各种基本操作&#xff0c;详细细节看代码。 #include<cstdio> #include<iostream> #include<cstring> #include<cstdlib>…

md5加密 兼容.netcore5

md5加密 支持.netcore5 using System; using System.Security.Cryptography; namespace MyApp.HelloWorld {class Program{static void Main(string[] args){Console.WriteLine(MD5Encrypt("123456"));Console.WriteLine("Hello World!");}/// <su…

【转载】安卓开发者在使用deepin15.4时可能会遇到的问题

本文转载自&#xff1a;https://bbs.deepin.org/forum.php?modviewthread&tid138244&extra 1、在你安装好Android Studio前别忘了先安装default-jdk2、终端提示&#xff1a;Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettingsgasp 解决方法&#xff1a…

.net core linux安装

手动安装 https://docs.microsoft.com/zh-cn/dotnet/core/install/linux-scripted-manual#manual-install 进入.net core 5.0 https://dotnet.microsoft.com/download/dotnet/5.0 再点击linux x64版本下载 https://download.visualstudio.microsoft.com/download/pr/7f736160-…

【转】java提高篇(二)-----理解java的三大特性之继承

【转】java提高篇(二)-----理解java的三大特性之继承 原文地址&#xff1a;http://www.cnblogs.com/chenssy/p/3354884.html 在《Think in java》中有这样一句话&#xff1a;复用代码是Java众多引人注目的功能之一。但要想成为极具革命性的语言&#xff0c;仅仅能够复制代码并对…

google AviatorEvaluator 变量公式计算

添加依赖 <dependency><groupId>com.googlecode.aviator</groupId><artifactId>aviator</artifactId><version>5.2.0</version> </dependency>编写代码 import com.googlecode.aviator.AviatorEvaluator; import com.google…

免费生成https证书以及配置

http升级到https需要在nginx的配置中加入证书信息,查询资料后确定生成证书两种方案第一种:自签名证书,然后开启 CloudFlare 的 CDN 服务 //确定是否安装opensslwhich openssl//如果没有安装,通过apt-get或者yum等方式安装即可sudo apt-get install openssl//生成一个名为“ssl.…

redis 4.0.9 centos7 双机集群安装

开启limits限制 sudo bash -c cat >> /etc/security/limits.conf <<-EOF * soft nofile 65536 * hard nofile 65536 * soft nproc 131072 * hard nproc 131072EOFreboot重启 安装redis 两台机器都运行 yum install -y wget gcc wget http://download.redis.io/…

关于毕业的一些事情

这篇日志&#xff0c;算是日记吧。就当做日记。 今天上午8点開始在8-302举行答辩&#xff0c;关于毕业论文&#xff0c;就是用的原先的智能问答机器人。也还算顺利。无论咋样&#xff0c;过是没问题。 晚上在校园食代举行班级谢师宴&#xff0c;老师来了15位左右&#xff0c;跟…

递归树思路总结思考

递归思路 传入数组 传入单个对象 传入数组 内部先遍历进行单个对象处理&#xff0c; 再递归单个对象的children 传入对象 内部先处理当前对象&#xff0c;再遍历对象children&#xff0c;对每个children进行递归调用。 需要处理返回值的情况 一种是传入对象指针&#xff…

前端学习(2441):删除处理完成

request.js <template> <div class"artical-container"><!--卡片--><el-card class"filter-card"><div slot"header" class"clearfix"><!--面包屑导航--><el-breadcrumb separator-class&quo…

5、用枚举值表示状态、选项、状态码

一、C语言中1、C语言中的枚举类型enum。在以一系列常量来表示错误状态码或可组合的选项时&#xff0c;极宜使用枚举为其命名。2、定义一个enumenum personAgeState { personAgeStateLitter,personAgeStateBigger};property (nonatomic, assign) enum personAgeState personAge;…

openjdk17体验

jdk17是继jdk8和jdk11之后的LTS版本&#xff0c;该版本支持到2029年12月&#xff0c;下载地址 https://jdk.java.net/17/ 我是ubuntu64位环境&#xff0c;下载linux/x64版本&#xff0c;解压 打开idea创建一个新项目&#xff0c;添加jdk17并设置为jdk17 写个helloworld packa…