假设我们对“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. __str__是什么函数_PHP str_shuffle()函数与示例
  2. GIS概念的总结(一)什么是GIS
  3. java guava_java项目中使用guava的工具包的心得
  4. linux java.net.bind,False java.net.BindException:已在Jetty上使用的地...
  5. 超详细!一文详解 SparkStreaming 如何整合 Kafka !附代码可实践
  6. RBAC用户角色权限设计方案(转)
  7. Python: 从PYTORCH导出模型到ONNX,并使用ONNX运行时运行它
  8. paip.提升安全性--------用户密码控件方案总结
  9. 机械硬盘显示无法访问由于IO设备错误的资料找回方法
  10. jq ui 日历控件
  11. 开源微信小程序源码新版及教程
  12. 南信大 计算机与软件学院 校花,美哭了!南京12所高校最美“校花”新鲜出炉!颜值爆表!你的母校上榜了吗?...
  13. uniapp微信小程序登陆方法
  14. 模拟器:思科 给路由器配置IP地址和子网掩码
  15. VS2017 C++控制台程序不用加pch.h
  16. 微信公众号的基本排版设置
  17. 8个你最想知道的数据中台问题,我们这次聊个透
  18. 女神节 | 那些奋斗在IT领域的“女神”们
  19. linux安装pymysql
  20. Maven配置阿里云HTTPS镜像地址

热门文章

  1. 404 Note Found· 第七次作业 - 需求分析报告
  2. 通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“Connection refused: connect.......
  3. 01背包问题(状态转移方程讲解)
  4. TI/德州仪器 TPS3808G30DBVT 微处理器
  5. 浙里办APP接入H5应用的坑
  6. 计算机开启telnet服务,telnet服务-开启telnet服务对电脑有何危害
  7. 前端开发:Vue项目打包步骤
  8. miniui设置属性值_jQuery教程之MiniUi绑定mini-combobox下拉框
  9. sklearn中常见的线性模型参数释义
  10. abaqus 关联 子程序_ABAQUS子程序关联当中的若干问题(一)