最常用的排序---快速排序法
最常用的排序—快速排序法
桶排序浪费空间,冒泡排序虽然解决了空间问题却在算法的执行效率上牺牲了很多,因此我们的快速排序法就诞生了,是不是听这个名字就很高档呢?
假设现在需要对"6,1,2,7,9,3,4,5,10,8"这十个数排序.我们需要先定义一个基准数,其实也就是一个作为参照的数,为了方便一般就把第一个数作为基准数,也就是我们的数字6.
方法其实很简单:分别从初始序列“6,1,2,7,9,3,4,5,10,8”两端开始“探测”。先从右往左找一个小于6的数(切记,一定是要从右向左开始),再从左往右找一个大于6的数,然后交换他们。这里可以用两个变量 i 和 j,分别指向序列最左边和最右边。刚开始的时候让 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;
}
}
最常用的排序---快速排序法相关推荐
- 【啊哈!算法】算法3:最常用的排序——快速排序
[啊哈!算法]算法3:最常用的排序--快速排序 上一节的冒泡排序可以说是我们学习第一个真正的排序算法,并且解决了桶排序浪费空间的问题,但在算法的执行效率上却牺牲了很多,它的时间复杂度达到 ...
- 排序-交换类排序--快速排序简介
交换类排序有冒泡和快排 冒泡排序相对简单,之前总结过: https://blog.csdn.net/u011109881/article/details/80038573 快速排序 参考: 数据结构( ...
- JAVA最常用的排序_冒泡排序、选择排序、快速排序
排序算法是Java面试题中最常考的,笔试题.机试题都会有,所有掌握最常用的排序是必须. 在效率中快速排序是这几种效率最高的. 代码验证过,可以直接复制测试运行. 代码如下: package com.l ...
- php1到5000排序,常用的排序算法(一)--快速排序(PHP实现)
常用的排序算法系列 快速排序 假设当前需要从小到大进行排序,快速排序的核心思路是,从当前数组中,找到一个元素作为基准比较值(key),分别从两个方向进行比较.从后往前找,比key小元素放在数组前面.然 ...
- 【重温基础算法】内部排序之快速排序法
内部排序之快速排序法 文章目录 内部排序之快速排序法 主要思想 过程演示 JAVA代码 算法分析 时间复杂度分析 最好时间复杂度 最坏时间复杂度 平均时间复杂度 空间复杂度 对冒泡排序的一种优化 主要 ...
- java语言冒泡排序法_Java实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等...
本文实现了八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序 首先是EightAlgorithms.java文件,代码如下: import jav ...
- 【Java】八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序
这篇文章主要介绍了Java如何实现八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序,需要的朋友可以参考下 本文实现了八个常用的排序算法:插入排序 ...
- Java 实现快速排序法对数组进行排序
快速排序是对冒泡排序的一种改进,其排序速度相对较快. 基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据要小,然后再按照这个方法对这两部分数据分别 ...
- 数据结构 快速排序法 升序排序
已知9名学生的信息,每个学生信息包括编号和姓名.学生信息为11,王红,22,刘军,47,王亮,92,张强,16,吴迪,3,李伟,7,赵磊,29,钱鹤,8,孙芳.用快速排序法实现以编号为排序码的升序排序 ...
最新文章
- Python OpenCV学习笔记之:图像读取,显示及保存
- Java多线程-synchronized关键字
- 这段AI的深情告白在外网爆火:我并非真实,从未出生,永不死亡,你能爱我吗?...
- 火爆背后的挑战:直播平台的高并发架构设计丨视频PPT下载
- 关于farpoint公司的控件:SPREAD for .NET Windows Forms Ed.的一些简单方法.
- 基础算法 —— 调度问题 —— 流水调度问题
- Lilishop开源商城系统 / lilishop
- Go语言极速入门手册
- 我开通个人博客了~~~~
- 攻防世界-WEB-新手-command_execution
- DHT11 温湿度传感器
- 简单快速将pdf转换成jpg的方法
- 边读边捋【july的】海量数据处理面试题
- 计算机配置时能关机吗,怎么设置时间让电脑自动关机?
- NX二次开发-UFUN读取属性的值UF_ATTR_read_value
- Windows和Mac常用网络测试命令
- Android AOA协议Android端 流程总结
- [CocosCreator]热更新插件使用心得以及注意事项
- PS合成图片#ps抠图#ps视频教程入门基础学习课程小白
- c++程序设计基础(第五版)(上) 习题与解答
热门文章
- windows pip 安装 whl文件
- java reactor模式例子_回顾 Reactor 模式
- Joint Learning of QA and QG阅读笔记
- mysql80版本连接 1251_解决Navicat Premium 连接 MySQL 8.0 报错1251的问题分析
- OpenGL着色器和vbo + vao的设置和使用
- JVM——对象创建与内存分配机制
- Vue项目中刷新当前页面的四种方法
- 图书销售系统App的设计与实现
- ++s与s++的区别(java)
- 给初学者的RxJava2.0教程(七)(转载)