/*
 * quick_sort.cpp
 *
 *  Created on: 2016-3-21
 *      Author: Lv_Lang
 */

//快速排序
#include <iostream>
using namespace std;

int a[100];//全局定义数组,方便函数使用

void swap(int i,int j)
{
	int temp = a[i];
	a[i] = a[j];
	a[j] = temp;
}

/*快速排序解释:
核心思想是找一个基准元素(一般选取首位元素),
然后遍历元素,比基准小的放左边,比基准大的放右边。
但其实按这个思想来写代码其实比较难写的,
所以说的更通俗一点就是:先把首位的拿出来被比较,
用一个哨兵j从数组最右边开始扫描,如果有小于基准的,先停下来;
然后哨兵i开始从数组最左边开始扫描,如果有大于基准的,也停下来;
此时左边有个比基准大的,右边有个比基准小的,交换二者就行了。
最后当两个哨兵相遇时,证明左右都扫了一遍了,
然后把他们相遇的那个点的元素跟基准元素互换位置,这就得到了一个初步排序的序列。
然后把刚才得到的序列切成两半(不含基准元素),
基准前面的元素是一半,基准后面的元素是另一半,对这两个子序列重复刚才的那个步骤。
递归一下,就能最终得到排好序的序列了。*/

void quick_sort(int left,int right)
{
	if(left >= right)//递归临界条件
		return;
	int i,j,temp;
	i = left;
	j = right;
	temp = a[left];
	while(i < j)
	{
		while(a[j] >= temp && i < j)
			j--;
		while(a[i] <= temp && i < j)
			i++;
		swap(i,j);
	}
	swap(left,i);
	quick_sort(left,i-1);
	quick_sort(i+1,right);
}

int main()
{
	int n;
	cin>>n;
	for(int i=0;i < n;i++)
		cin>>a[i];
	quick_sort(0,5);
	for(int i=0;i<5;i++)
		cout<<a[i]<<" ";
	cout<<a[5]<<endl;

	return 0;
}

另外,这篇博客写的挺好的,形象易懂:

坐在马桶上看算法之快速排序

快速排序C++的更多相关文章

  1. [C#][算法] 用菜鸟的思维学习算法 -- 马桶排序、冒泡排序和快速排序

    用菜鸟的思维学习算法 -- 马桶排序.冒泡排序和快速排序 [博主]反骨仔 [来源]http://www.cnblogs.com/liqingwen/p/4994261.html  目录 马桶排序(令人 ...

  2. 算法与数据结构(十六) 快速排序(Swift 3.0版)

    上篇博客我们主要聊了比较高效的归并排序算法,本篇博客我们就来介绍另一种高效的排序算法:快速排序.快速排序的思想与归并排序类似,都是采用分而治之的方式进行排序的.快速排序的思想主要是取出无序序列中第一个 ...

  3. [算法]——快速排序(Quick Sort)

    顾名思义,快速排序(quick sort)速度十分快,时间复杂度为O(nlogn).虽然从此角度讲,也有很多排序算法如归并排序.堆排序甚至希尔排序等,都能达到如此快速,但是快速排序使用更加广泛,以至于 ...

  4. 排序算法----调用库函数qsort进行快速排序

    功 能: 快速排序 头文件:stdlib.h 用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const ...

  5. Html5 快速排序演示

    快速排序(Quicksort)是对冒泡排序的一种改进.快速排序由C. A. R. Hoare在1962年提出. 它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另 ...

  6. Java 快速排序两种实现

    快速排序,只要学习过编程的人肯定都听说过这个名词,但是有时候写的时候还真蒙住了,网上搜罗了下以及查阅了"introduction to algorithm",暂时找到两种实现快排的 ...

  7. java基础算法之快速排序

    快速排序(Quicksort)是对冒泡排序的一种改进.在大学学过之后现在基本忘了,最近在好多地方都看到说快速排序在面试会问到,于是自己也准备重新拾起以前忘记的东西来,慢慢的积累自己的基础知识.figh ...

  8. PAT 1045. 快速排序(25)

    著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边. 给定划分后的N个互不相同的正整数的排列,请问有多 ...

  9. 快速排序中的partition函数的枢纽元选择,代码细节,以及其标准实现

    很多笔试面试都喜欢考察快排,叫你手写一个也不是啥事.我很早之前就学了这个,对快速排序的过程是很清楚的.但是最近自己尝试手写,发现之前对算法的细节把握不够精准,很多地方甚至只是大脑中的一个映像,而没有理 ...

  10. php冒泡排序和快速排序

    如有错误,请指出... //快速排序(array_merge整合数组)function quick_sort($arr){ $num=count($arr); if($num<=1){ retu ...

随机推荐

  1. angularJS ng-grid 配置

    以下是按我的需求修改的 简单的demo  可以自己扩展 HTML: <!DOCTYPE html> <html class="no-js" ng-app=&quo ...

  2. java 中继承,组合,重载,重写的实现原理 (转)

    我们知道,继承,组合,重载,重写是java语言的面向对象实现的基本特征. 那么在java内部,究竟是如何实现这些面对对象的基本特征的呢? 继承和组合是面向对象中代码复用的主要实现方式,他们可以达到类似 ...

  3. Cheatsheet: 2015 09.01 ~ 09.30

    Web A Guide to Vanilla Ajax Without jQuery Gulp for Beginners A Detailed Walkthrough of ASP.net MVC ...

  4. Hibernate不能自动建数据表解决办法

    首先自己要注意自己的MYSQL版本,然后设置对应的方言 兼容性模式 <property name="hibernate.dialect">org.hibernate.d ...

  5. Aggregation 聚集

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  6. CSS基础介绍

    CSS介绍 CSS是指层叠样式表,CSS样式表极大的提高了工作效率 CSS基础语法 1. 首先选择一个属性 2. 选择了属性以后,用大括号括起来 3. 括号里面是对应的属性和属性值,如: select ...

  7. Python学习笔记(0)

    Python 是什么类型的语言 Python是脚本语言 Python下载地址:https://www.python.org/downloads/ Python版本:Python 3.4.2 - 64b ...

  8. C#中静态与非静态方法比较

    C#静态方法与非静态方法的区别不仅仅是概念上的,那么他们有什么具体的区别呢?让我们通过本文向你做一下解析. C#的类中可以包含两种方法:C#静态方法与非静态方法.那么他们的定义有什么不同呢?他们在使用 ...

  9. python打怪之路【第二篇】:ImportError: No module named setuptools

    在python安装第三方模块时出现如下错误: python错误:ImportError: No module named setuptools这句错误提示的表面意思是:没有setuptools的模块, ...

  10. 插件框架(Plugin Framework)

    HOW TO MAKE PLUGIN FRAMEWORK 插件系统构建 Dissect Eclipse Plugin Framework