假设我们对“6,1,2,7,9,3,4,5,10,8”这十个数进行排序(从小到大进行排序)。

首先我们需要随便找一个基准数(一个用来参照的数),一般情况下选取第一个数作为基准数,接下来,需要把这个序列中所有比基准数大的数放在它的右边,比基准数小的数放在它的左边。

初始状态下,数字6在序列的第一位,我们要做的第一步就是把6挪到序列中间的某个位置,假设这个位置是k,以k为分界点,左边的数都小于等于6,右边的书都大于等于6.

类似于冒泡排序,快排也是通过交换的方式把数放到它应该在的位置。

方法很简单,分别从序列“6,1,2,7,9,3,4,5,10,8”两端开始探测。

先从右往左找一个小于6的数,再从左往右找一个大于6的数,然后交换他们。

这里可以用两个变量i,j,左边的为“哨兵i”,右边的为“哨兵j”。

刚开始时让“哨兵i”站在序列最左边一个数的位置,指向数字6,让“哨兵j”站在序列最左边一个数的位置,指向数字8,如图所示。

此时基数6将左右两边分成了两个序列,在继续按照上述方法处理左右两个序列。

整个算法的处理过程如图:

代码实现:

#include <stdio.h>void quicksort(int left,int right,int* a)
{int i,j,t,temp;if(left>right)return;temp = a[left]; //temp中存放基准数i = left;j = right;while(i != j){// 先从右往左找while(a[j]>=temp && j>i){j--;}while(a[i]<=temp && i<j){i++;}//交换if(i<j){t = a[i];a[i] = a[j];a[j] = t;}}//将基准数归位a[left] = a[i];a[i] = temp;quicksort(left, i-1,a); // 递归 继续处理左边序列quicksort(i+1, right,a);// 递归 继续处理右边序列}int main()
{int i =0;int n= 0;int a[101]={0};scanf("%d",&n);for( i=0;i<n;i++){scanf("%d",&a[i]);}quicksort(0,n-1,a);for( i=0;i<n;i++){printf("%d ",a[i]);}return 0;
}

《啊哈!算法》——快速排序相关推荐

  1. 读《c#与算法--快速排序》随笔

    <c#与算法--快速排序>地址: http://www.cnblogs.com/isun/archive/2009/04/25/1443603.html 随手写的测试DEMO,web程序不 ...

  2. 排序算法 | 快速排序,算法的图解、实现、复杂度和稳定性分析与优化

    今天讲解一下快速排序算法的原理以及实现.复杂度和稳定性分析与优化 目录 1 快速排序的原理 2 快速排序代码实现 3 复杂度和稳定性分析.优化 4 习题练习 1 快速排序的原理 快速排序是所有内部排序 ...

  3. 快速排序 java导包_排序算法-快速排序(Java实现)

    上篇我们讲了冒泡排序,这次我们讲它的升级版快速排序,"快速",一看就是个好算法~ 快速排序(QuickSort)是啥? 我们先看下百度百科的介绍快速排序(Quicksort)是对冒 ...

  4. 排序算法 快速排序 python 0913

    排序算法 快速排序 python 0913 快速排序 思路 定义快排方法 接收参数:原始列表,起始位置,终止位置 判断是否符合快排条件,当起始下标与终止下标相等时,代表只有一个元素,无法排序,退出 一 ...

  5. 排序算法 快速排序【详细步骤图解】

    排序算法 快速排序[详细步骤图解] 快速排序 主要思想 图解 第一轮分割序列 第二轮分割序列 --- 左子序列 小结 第三轮分割序列 --- 右子序列 C++实现 总结 快速排序 给定一个序列:22 ...

  6. 【图解算法】排序算法——快速排序

    简介 首先还是得简单的介绍一下快速排序这个算法. 快速排序(Quicksort),又称划分交换排序(partition-exchange sort),一种排序算法,最早由东尼·霍尔提出.在平均状况下, ...

  7. JavaScript的排序算法——快速排序

    排序算法(Sorting algorithm)是计算机科学最古老.最基本的课题之一.要想成为合格的程序员,就必须理解和掌握各种排序算法. 快速排序(Quicksort)是对冒泡排序的一种改进. 快速排 ...

  8. 十大经典排序算法-快速排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  9. 算法:快速排序实现 定制比较函数

    1. 快速排序基本算法 1 #include<stdio.h> 2 const static int NUM = 47; 3 4 int quick_sort(int *a, int st ...

  10. 排序算法---快速排序(java版)

    快速排序 原理 快速排序(Quick Sort)算法,简称快排,利用的也是分治的思想,快排的思路是:如果要对 m->n 之间的数列进行排序,我们选择 m->n 之间的任意一个元素数据作为分 ...

最新文章

  1. addTwoNumbers
  2. 【技术】一个由于时间问题引发的血案
  3. boost::parameter::aux::maybe相关的测试程序
  4. 程序员选择字体的标准是
  5. android封装好的Color类中的常量
  6. 用Java描述数据结构之线性表的顺序存储(顺序表),ArrayList及其方法的介绍
  7. 被限高消费后,王思聪又有新动作:新增对外投资...
  8. 设计资源 | 万圣节矢量图标
  9. 虚拟机linux扩展磁盘容量,kvm虚拟机扩展磁盘容量
  10. [转]UI-Grid HeaderCellClass
  11. MVCJSONJQuery分页实现
  12. 三、JVM — 类加载过程
  13. Cocos Creator 使用位图工具BMFont自定义字体 fnt
  14. 随机一个淘宝买家秀网站源码
  15. 运用ArcGIS对图像进行二值化处理
  16. Android从Assets复制文件到本地
  17. Linux中设置Java程序开机自动运行
  18. Spring Boot2.0 - 玩转logback日志
  19. TCL: an ANN-to-SNN Conversion with Trainable Clipping Layers
  20. C#删除文件和文件夹到回收站

热门文章

  1. 在Java中实现两数相乘
  2. 正则表达式限制VUE input只能输入正整数
  3. 关于BigDecimal 的计算
  4. java参数的传递方式有_Java参数的传递方式。
  5. 初次使用ubuntu
  6. android hotfix nuwa2, support gradle 2.x
  7. 视频教程-MiniUI 实战演练视频教程-其他
  8. 不使用pinyin4j, 通过字符串截取手段快速查询通讯录联系人的拼音(包括全拼和简拼)
  9. 火车售票管理系统 设计类图
  10. JAVA并发编程实战——共享对象