快速排序坑挺多的,今天有空记录一下自己的实现,并加上详细的注释和举例

#include<iostream>

using namespace std;

int partion(int num[],int left,int right)
{
int i,j,index,exchage;
index = num[left];
i = left; //由于while (i < j)已经决定了,如果 i = left + 1;而数组只有两个元素且j 指向的元素比较大,如 3 8 那么循环不会执行,最后还把8 和3交换了
j = right;
while (i<j) // 3 7 2 4 下面的sawp 执行后 变成 3 2 7 4 这时候 i 指向7 j指向2, 就不需要再循环了j就是最终位置
{
while(num[i] <= index && i < right) // i < right 是为了处理 100 2 3 4 这样的情况,i 会一直扫描越界,为什么不是 i<= right,因为已经j 在right了,一定会处理那个元素
i++; while(num[j] >= index && j > left) //j > left 是为了处理 -13 2 1 4 这样的情况,j 会一直扫描到-13的左边越界, 注意 j 是 > left, 不是>i 否则 3 8 这种情况就错了
j--; if(i < j)
swap(num[i++],num[j--]);//循环结束三种情况,第一种是 3 7 2 4 第二种是 3 3 1,i == right == j结束了,这时候 i j 肯定在一起,就没有必要交换了
//第三种是 3 7 9 这时候j 因为越界判断失败而退出循环,为什么越界,因为它碰到了第一个元素,这时候不能交换3 和 7 ,因为i 停在了比第一个元素大的地方
} swap(num[left],num[j]);// 从小到大排序注意是 交换 j 和 index 位置! return j;
}
void quick_sort(int num[],int lo,int hi)
{
if (lo<hi)
{
int x = partion(num,lo,hi); //对于 3 8 ,x = 0
quick_sort(num,lo,x-); //0 到 -1 所以要判断lo <= hi 如果是等于
quick_sort(num,x+,hi);//1 到 1,由于只有一个元素8,也没有必要排序了所以上面注释的lo <= hi改成 lo < hi }
}
int main()
{
int a[] = {, , , , };
quick_sort(a,,);
for(i=;i<;i++)
cout << a[i] << endl;
return ;
}

c++实现快速排序详细分析的更多相关文章

  1. ZIP压缩算法详细分析及解压实例解释

    最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据 ...

  2. 1125MySQL Sending data导致查询很慢的问题详细分析

    -- 问题1 tablename使用主键索引反而比idx_ref_id慢的原因EXPLAIN SELECT SQL_NO_CACHE COUNT(id) FROM dbname.tbname FORC ...

  3. LinkedList详细分析

    一.源码解析1. LinkedList类定义2.LinkedList数据结构原理3.私有属性4.构造方法5.元素添加add()及原理6.删除数据remove()7.数据获取get()8.数据复制clo ...

  4. android ListView 九大重要属性详细分析、

    android ListView 九大重要属性详细分析. 1.android ListView 一些重要属性详解,兄弟朋友可以参考一下. 首先是stackFromBottom属性,这只该属性之后你做好 ...

  5. C语言中的static 详细分析

    转自:http://blog.csdn.net/keyeagle/article/details/6708077/ google了近三页的关于C语言中static的内容,发现可用的信息很少,要么长篇大 ...

  6. Linux内核OOM机制的详细分析(转)

    Linux 内核 有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了 防止内存耗尽而内核会把该进程杀掉.典 ...

  7. Android-Native-Server 启动和注册详细分析

    Android-Native-Server 启动和注册详细分析     以mediaService为实例来讲解: mediaService的启动入口 是一个 传统的  main()函数 源码位置E:\ ...

  8. px,dp,dip,sp,in,mm,pt详细分析

    px,dp,dip,sp,in,mm,pt详细分析 px   :(pixels),屏幕的像素点,不同的设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多. dip  :(devi ...

  9. Http Pipeline详细分析(下)

    Http Pipeline详细分析(下) 文章内容 接上面的章节,我们这篇要讲解的是Pipeline是执行的各种事件,我们知道,在自定义的HttpModule的Init方法里,我们可以添加自己的事件, ...

随机推荐

  1. CF 322A Ciel and Dancing 好简单的题。。最喜欢水题了

    A. Ciel and Dancing time limit per test 1 second memory limit per test 256 megabytes input standard ...

  2. hadoop部署错误

    hadoop的单机部署很简单也不容易出错,但是对生产环境的价值和意义不大,但是可以快速用于开发. 部署hadoop的错误原因不少,并且很奇怪. 比如,用户名不同,造成客户端和服务器通讯产生认证失败的错 ...

  3. Python自学笔记——Matplotlib风羽自定义

    [前言]对于气象专业的小学生来说,风场是预报重要的参考数据,我们所知的风羽有四种:短线代表风速2m/s,长线代表风速4m/s,空心三角代表风速20m/s,实心三角代表风速50m/s.而matplotl ...

  4. C语言之分支结构 if(一)

    一 程序的三种基本结构 顺序结构:程序从上往下依次执行,这个叫顺序结构 分支结构:有选择的执行或者不执行某段代码 循环结构:重复的执行某段代码 二 分支结构之if 最简单的俩种用法 (tips: if ...

  5. ASP.NET Zero--10.一个例子(3)商品分类管理-新建

    1.打开Index视图 页面中添加一个按钮,代码如下: <div class="row margin-bottom-5"> <div class="co ...

  6. Python_web框架解析

    这一阵正在学习廖雪峰老师的实战课程,这里对其中web.py框架进行一些分析,总结一下学到的东西. 这一部分的课程网站:http://www.liaoxuefeng.com/wiki/001374738 ...

  7. Git安装使用

    转载:http://www.open-open.com/lib/view/open1414396787325.html 1.window版地址 https://git-for-windows.gith ...

  8. 前端学习——ionic/AngularJs——获取验证码倒计时按钮

     按钮功能为:点击"获取验证码"--按钮不可用-设置倒计时-60秒后重新获取. 代码借鉴于:http://plnkr.co/edit/Swj82MpJSix3a47jZRHP?p= ...

  9. [HMLY]12.iOS中的Protocol

    最近工作中遇到一个比较迷惑的事情,在我利用runtime获取类的属性的时候,由于类实现了一个自定义协议,导致遍历出来的属性中包含了NSObject协议中的property.查来查去,只是知道和prot ...

  10. python 解析html

    #!/usr/local/bin/python2.7 # -*- coding: utf-8 -*-: import requests from pyquery import PyQuery as p ...