C++快速排序

  快速排序作为排序家族里面最为快捷的方式,值得思考。我们将一个数组中的某一个数定为基点,然后通过快速排序按照需求(假设升序),将比基点小的数丢在基点左边,把比基点大的数丢在基点右边这样来将基点数的正确位置找到。接着,我们再对基点两边的数组分别进行快排以达到有序的目的。

  举例实际分析如下:

  int data[6] = {6,2,7,3,8,9};

  int i = left,j = right,key = data[left];

  初始数组为6 2 3 7 8 9,我们将基点数定位6进行第一次比较。

  此时right = 5,left = 0。先从右往左找寻比key小的数,right = 3时找到。将data[ left]赋值为data[right] -> 3 2 7 3 8 9。

  然后从左往右找比key大的数,i = 2时找到。我们将data[right]赋值为data[left] -> 3 2 7 7 8 9。

  左右找寻数的任务已经完成,此时应该将key值放在正确位置去了,但是这个位置是哪里?现在还不知道,因为左右标志位还不等,但是下一次循环开始后,发现left 和 right 在2的地方相等了。所以这个位置应该是2 -> 3 2 6 7 8 9。这样,一次排序完成了。

  现在i 和 j 已经都变成了2而且6的正确位置已经找到了。但是按照算法的思路将这个数组分为左右两部分该怎么办,我们的left和right派上了大用场。从left 到 i - 1为左边部分,从j + 1 到 right则为右半部分,对这两部分进行递归快排最终可得到结果。

//
//  main.cpp
//  test
//
//  Created by MadMarical on 15/11/20.
//  Copyright (c) 2015年 com. All rights reserved.
//

#include <iostream>using namespace std;int pData[] = {6,2,7,3,8,9};void quickSort(int *p,int s,int t)
{int left,right;int key;left = s,right = t;key = p[left];if (s >= t){return;}while (left != right) //左右标志不等,在数组内寻找
    {while (left != right && p[right] >= key) //因为是升序,在数组里从右往左找寻一个比key小的数。
        {right--;}p[left] = p[right];while (left != right && p[left] <= key){left++;}p[right] = p[left];}p[left] = key;quickSort(p, s, left - 1);quickSort(p, right + 1, t);
}int main(int argc, const char * argv[])
{quickSort(pData, 0, 5);cout<<pData[0]<<" "<<pData[1]<<" "<<pData[2]<<" "<<pData[3]<<" "<<pData[4]<<" "<<pData[5]<<endl;return 0;
}

反思:

1.如果使用swap进行交换,在代码理解上会减轻不少。

2.快速排序中的判断方法和递归调用值得深思,网上的许多答案也是模棱两可,还是要自己理解比较靠谱。

  

  

 

转载于:https://www.cnblogs.com/thewaytomakemiracle/p/4981054.html

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

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

相关文章

回顾一年的工作历程_【设备管理公司】召开20202021年度总结计划表彰暨工作述职会议...

点击上方蓝字关注我们2020年即将过去&#xff0c;为了总结2020年各项工作开展情况&#xff0c;同时做好2021年工作计划与部署&#xff0c;2020年12月30日-31日&#xff0c;设备管理公司组织召开了2020-2021年度总结计划表彰暨工作述职会议。公司领导、各部门经理、部门主管、车…

注册验证的时候一直出现的报错问题,终于解决了

今天再注册验证表单的时候一直报错&#xff0c;但是什么都没有改&#xff0c;就报错了&#xff0c;后面才知道原来是和我上次上传图片的时候&#xff0c;导入的2个js的顺序有关系的&#xff0c; 45行和41行互相换一下位置就好了 转载于:https://www.cnblogs.com/likeji/p/61433…

重排序

一、重排序。 1、为什么需要重排序&#xff1f; 现在的CPU一般采用流水线来执行指令。一个指令的执行被分成&#xff1a;取指、译码、访存、执行、写回、等若干个阶段。然后&#xff0c;多条指令可以同时存在于流水线中&#xff0c;同时被执行。 指令流水线并不是串行的&#x…

tableau三轴该怎么做_如何用tableau绘制城市地铁线路图?

在用tableau绘制地铁线路图之前&#xff0c;当然是要获取相关的数据啦我们以郑州目前已开通的地铁为例&#xff0c;分别是1、2、5号线经度、维度可在 网页上自行搜索哦&#xff08;以谷歌地图为准&#xff09;有了这些下面我们就要开始啦将Excel中你所需要的数据直接导入到tabl…

JS七种加密解密方法

HTML或JS加密解密 本文一共介绍了七种方法&#xff1a;   一&#xff1a;最简单的加密解密   二&#xff1a;转义字符"\"的妙用   三&#xff1a;使用Microsoft出品的脚本编码器Script Encoder来进行编码 &#xff08;自创简单解码&#xff09;  …

提高solr的搜索速度

之前是使用12台机分布式搜索&#xff0c;1台为主机做索引并分发给子机&#xff0c;8台做大索引搜索服务&#xff0c;3 台做小索引搜索服务&#xff0c;配置基本是内存在4-8G&#xff0c;cpu:2-8core的服务器&#xff0c;索引的大小为8G。搜索的响应时间 是150ms左右。&#xff…

哲学到编程:思想的实例化

万古长江水&#xff0c;千年儒释道。历史的长流中&#xff0c;芸芸众生&#xff0c;参差不齐&#xff0c;但总是能够总结出一个“生旦净末丑”来。儒、释、道&#xff0c;五千年的中华文化&#xff0c;却总是围绕着这三种主流思想交相演绎。千年间&#xff0c;豪士俊杰&#xf…

python 字符串交集_Python序列--集合(set)

集合集合用于保存不重复元素。- 集合和列表非常相似- 不同点&#xff1a;1.集合中只能存储不可变对象2.集合中存储的对象是无序(不是按照元素的插入顺序保存)3.集合中不能出现重复的元素集合的所有元素都放在一对”{ }” 中&#xff0c;两个相邻的元素之间用”,”分隔。集合最好…

mysql binlog日志查看及解码

mysql bin log日志导出 mysqlbinlog mysql-bin.000005 > /home/17bin.log 需要添加参数&#xff08;--base64-outputdecode-rows -v&#xff09;对输出结果解码 mysqlbinlog --base64-outputdecode-rows -v mysql-bin.000005 > /home/17bin.log转载于:https://www.cnbl…

【Python开发】Python的GUI用法总结

引用模块&#xff08;tkinter&#xff09;&#xff1a; 1 from tkinter import * 主窗口设置&#xff1a; 1 # 主窗口 2 tk Tk() # 主窗口实例化 3 tk.title("文本处理工具") # 主窗口标题 4 tk.geometry("700x4001001…

JAVA 环境变量配置

JAVA 环境变量配置 1. 安装JDK 2.配置系统变量 新建          JAVA_HOME&#xff1a;D:\Program Files\Java\jdk1.8.0_65 Path添加       %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 新建CLASSPATH  .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; 3.完成…

8修改host_正点原子【STM32-F407探索者】第五十九章 USB 鼠标键盘(Host)实验

1)资料下载:点击资料即可下载2)对正点原子Linux感兴趣的同学可以加群讨论&#xff1a;9354467413&#xff09;关注正点原子公众号&#xff0c;获取最新资料更新上一章我们向大家介绍了如何利用 STM32F4 的 USB HOST 接口来驱动 U 盘&#xff0c;本章&#xff0c;我们 将利用 ST…

CF815C Karen and Supermarket [树形DP]

题目传送门 Karen and Supermarket On the way home, Karen decided to stop by the supermarket to buy some groceries. She needs to buy a lot of goods, but since she is a student her budget is still quite limited. In fact, she can only spend up to b dollars. Th…

linux命令积累之egrep命令

学搭建Nginx环境&#xff0c;必须要配置的Nginx.conf文件中&#xff0c;如下&#xff1a;#user nobody;worker_processes 1;#error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;#pid logs/nginx.pid;events { worke…

Sublime Text 3 安装及插件推荐

本篇介绍跨平台编辑器Sublime Text 3的安装和其插件推荐。 目录&#xff1a; 1.介绍 2.下载安装 3.插件 4.参考资料 1.介绍 Sublime Text具有漂亮的用户界面和强大的功能&#xff0c;例如代码缩略图&#xff0c;Python的插件&#xff0c;代码段等。还可自定义键绑定&#xff0c…

6工程文件夹作用_data_dragon数据工程小工具收集

最近在GitHub上创建了一个新工程&#xff0c;收集个人在数据工程工作的小工具集合&#xff0c;命名为data_dragon (数据一条龙)。取这个名字的是希望这些脚本或代码能够复用&#xff0c;端到端地减少临时数据处理的时间。最近因为工作上的一些变化&#xff0c;写作节奏有点被打…

暑假第十七测

题解&#xff1a; 第一题 #include<bits/stdc.h> using namespace std; #define ll long long const int M 1e5 10; ll a[M], b[M], ans; priority_queue <ll, vector<ll> , greater<ll> > Q; int main(){freopen("buy.in","r",…

Uva 11354 LCA 倍增祖先

题目链接&#xff1a;https://vjudge.net/contest/144221#problem/B 题意&#xff1a;找一条从 s 到 t 的路&#xff0c;使得瓶颈路最小。 点的数目是10^4&#xff0c;如果向之前的方案求 maxcost数组&#xff0c;O(n*n)时间是过不了的&#xff0c;这个时候&#xff0c;用到了…

Nginx搭建flv视频点播服务器

Nginx搭建flv视频点播服务器前一段时间使用Nginx搭建的多媒体服务器只能在缓冲过的时间区域内拖放, 而不能拖放到未缓冲的地方. 这就带来了一个问题: 如果视频限速的速率很小, 那么客户端观看视频时肯定不流畅, 而且用户不能向前拖放, 用户体验很不好. 如果视频限速的速率很大或…

编码拾遗

1 #!/usr/bin/env python32 #-*- coding:utf-8 -*-3 4 Administrator 5 2018/8/16 6 7 8 # fopen("demo","r",encoding"utf8")9 # dataf.read() 10 # print(data) 11 # f.close() 12 13 14 # print("沈哲子") 15 16 s"中国&qu…