最常用的排序—快速排序法

桶排序浪费空间,冒泡排序虽然解决了空间问题却在算法的执行效率上牺牲了很多,因此我们的快速排序法就诞生了,是不是听这个名字就很高档呢?

假设现在需要对"6,1,2,7,9,3,4,5,10,8"这十个数排序.我们需要先定义一个基准数,其实也就是一个作为参照的数,为了方便一般就把第一个数作为基准数,也就是我们的数字6.

方法其实很简单:分别从初始序列“6,1,2,7,9,3,4,5,10,8”两端开始“探测”。先从右往左找一个小于6的数(切记,一定是要从右向左开始),再从左往右找一个大于6的数,然后交换他们。这里可以用两个变量 ij,分别指向序列最左边和最右边。刚开始的时候让 i 指向序列的最左边(即i=1),指向数字6。让 j 指向序列的最右边(即j=10),指向数字8。

然后 j 就找到了"5",i 就到了"7",交换 i 和 j 现在序列就变成了"6,1,2,5,9,3,4,7,10,8".继续向下寻找,变成"6,1,2,5,4,3,9,7,10,8"突然 i,j 在"3"相遇了,这时候在把"3"和基准数"6"交换.“3,2,5,4,3,6,10,7,9,8”.这样就把小于6的放在了左边,大于的放在了右边.

相同的道理,再处理"6"的左边和右边.最后就变成了"1,2,3,4,5,6,7,8,9,10".

#include<stdio.h>int a[100];
void quicksort(int left,int right) {int i,j,temp,t;temp=a[left];//temp就是基准数 i = left;j = right;if(left > right) return ;while(i != j) {//一定是先从右向左找 while(a[j] >= temp && i < j) 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);quicksort(i+1,right);return ;
}
int main() {int n;scanf("%d",&n);for(int i = 0;i < n;i++) scanf("%d",&a[i]);//快排的调用 quicksort(0,n-1);for(int i = 0;i < n;i++) printf("%d ",a[i]);
return 0;
}
}

最常用的排序---快速排序法相关推荐

  1. 【啊哈!算法】算法3:最常用的排序——快速排序

    [啊哈!算法]算法3:最常用的排序--快速排序        上一节的冒泡排序可以说是我们学习第一个真正的排序算法,并且解决了桶排序浪费空间的问题,但在算法的执行效率上却牺牲了很多,它的时间复杂度达到 ...

  2. 排序-交换类排序--快速排序简介

    交换类排序有冒泡和快排 冒泡排序相对简单,之前总结过: https://blog.csdn.net/u011109881/article/details/80038573 快速排序 参考: 数据结构( ...

  3. JAVA最常用的排序_冒泡排序、选择排序、快速排序

    排序算法是Java面试题中最常考的,笔试题.机试题都会有,所有掌握最常用的排序是必须. 在效率中快速排序是这几种效率最高的. 代码验证过,可以直接复制测试运行. 代码如下: package com.l ...

  4. php1到5000排序,常用的排序算法(一)--快速排序(PHP实现)

    常用的排序算法系列 快速排序 假设当前需要从小到大进行排序,快速排序的核心思路是,从当前数组中,找到一个元素作为基准比较值(key),分别从两个方向进行比较.从后往前找,比key小元素放在数组前面.然 ...

  5. 【重温基础算法】内部排序之快速排序法

    内部排序之快速排序法 文章目录 内部排序之快速排序法 主要思想 过程演示 JAVA代码 算法分析 时间复杂度分析 最好时间复杂度 最坏时间复杂度 平均时间复杂度 空间复杂度 对冒泡排序的一种优化 主要 ...

  6. java语言冒泡排序法_Java实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等...

    本文实现了八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序 首先是EightAlgorithms.java文件,代码如下: import jav ...

  7. 【Java】八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序

    这篇文章主要介绍了Java如何实现八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序,需要的朋友可以参考下 本文实现了八个常用的排序算法:插入排序 ...

  8. Java 实现快速排序法对数组进行排序

     快速排序是对冒泡排序的一种改进,其排序速度相对较快. 基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据要小,然后再按照这个方法对这两部分数据分别 ...

  9. 数据结构 快速排序法 升序排序

    已知9名学生的信息,每个学生信息包括编号和姓名.学生信息为11,王红,22,刘军,47,王亮,92,张强,16,吴迪,3,李伟,7,赵磊,29,钱鹤,8,孙芳.用快速排序法实现以编号为排序码的升序排序 ...

最新文章

  1. Python OpenCV学习笔记之:图像读取,显示及保存
  2. Java多线程-synchronized关键字
  3. 这段AI的深情告白在外网爆火:我并非真实,从未出生,永不死亡,你能爱我吗?...
  4. 火爆背后的挑战:直播平台的高并发架构设计丨视频PPT下载
  5. 关于farpoint公司的控件:SPREAD for .NET Windows Forms Ed.的一些简单方法.
  6. 基础算法 —— 调度问题 —— 流水调度问题
  7. Lilishop开源商城系统 / lilishop
  8. Go语言极速入门手册
  9. 我开通个人博客了~~~~
  10. 攻防世界-WEB-新手-command_execution
  11. DHT11 温湿度传感器
  12. 简单快速将pdf转换成jpg的方法
  13. 边读边捋【july的】海量数据处理面试题
  14. 计算机配置时能关机吗,怎么设置时间让电脑自动关机?
  15. NX二次开发-UFUN读取属性的值UF_ATTR_read_value
  16. Windows和Mac常用网络测试命令
  17. Android AOA协议Android端 流程总结
  18. [CocosCreator]热更新插件使用心得以及注意事项
  19. PS合成图片#ps抠图#ps视频教程入门基础学习课程小白
  20. c++程序设计基础(第五版)(上) 习题与解答

热门文章

  1. windows pip 安装 whl文件
  2. java reactor模式例子_回顾 Reactor 模式
  3. Joint Learning of QA and QG阅读笔记
  4. mysql80版本连接 1251_解决Navicat Premium 连接 MySQL 8.0 报错1251的问题分析
  5. OpenGL着色器和vbo + vao的设置和使用
  6. JVM——对象创建与内存分配机制
  7. Vue项目中刷新当前页面的四种方法
  8. 图书销售系统App的设计与实现
  9. ++s与s++的区别(java)
  10. 给初学者的RxJava2.0教程(七)(转载)