快速排序(抽象理解,最快了解)
快速算法核心为分而治之
选取第一个数为基准
将比基准小的数交换到前面,比基准大的数交换到后面
对左右区间重复第二步,直到各区间只有一个数
(基准就是长官。小兵任务是给长官找个好地方。
这里可以理解为j小兵不害怕比长官的,而i小兵不害怕比长官小的,小兵是不能后退,那么只有两个小兵调换位置就可以继续向前走了)
j小兵从8开始,比长官6大的那么就继续向前,到比6小的5上面停止移动,等待命令,然后i小兵开始向前移动,碰到比自己小的跳过,比自己大的停止,然后两个小兵调换位置,继续如此直到两个小兵见面。
然后长官去他们找到的位置,他们去去长官原来的位置进行保护。
6 1 2 7 9 3 4 5 10 8
i j
6 1 2 7 9 3 4 5 10 8
i j
6 1 2 5 9 3 4 7 10 8
i j
------------------------------------------------------------------
剩下的便是继续这个步骤,如图:
具体代码如图:
/***********************************************************
*版权所有:(C) 2021.6.10 烽火副队(第八方面军)
*
*文件名称:快速算法(小兵与长官那些事)
*内容摘要:算法
*当前版本:
*文件作者:周红
*完成日期:2021.6.10
*
*修改记录:暂无
***********************************************************/
#include<stdio.h>
int fun(int a[],int low,int high){//low;序列第一个元素 //high;序列最后一个元素 int arr;int tmp=a[low];//tmp基准 int arr1=low; //暂时存放基准位置 if(low>=high) //如果满足这个条件函数结束 return 0;while(low<high){ while(tmp <= a[high]&&low<high) // 集准小于最后面的一个元素,元素下标-1 high--; while(low<high&&tmp>=a[low]) // 集准大于前面的一个元素,元素下标+1 low++;arr=a[low];a[low]=a[high];a[high]=arr; //不满足上面两个while条件则换位 }arr=a[low];a[low]=tmp;a[arr1]=arr; //将基准和中间调换 return low; //返回基准位置
}
void fun1(int a[],int low,int high){//递归 if(low<high){int index=fun(a,low,high);fun1(a,low,index-1);fun1(a,index+1,high);}
}
int main(){int n;printf("请输入排序总位数:\n"); scanf("%d",&n);int a[n];printf("请输入排序的元素:\n"); for(int i=0;i<n;i++)scanf("%d",&a[i]);fun1(a,0,n-1); printf("排完序的元素为:\n"); for(int j=0;j<n;j++)printf("%d ",a[j]);return 0;
}
fun主要实现基准前后进行比较大小;
fun1是进行递归,分治;
结果图:
快速排序(抽象理解,最快了解)相关推荐
- PAT甲级1101 Quick Sort:[C++题解]DP、快速排序划分个数、快排
文章目录 题目分析 题目来源 题目分析 来源:acwing 题意重述:快排的原理,给定一个序列,请判断其中几个数可以作为快速排序划分步骤的分界点. 分界点充分必要条件是:左边的数都比它小,右边的数都比 ...
- 快速排序到底有多快?
上期为大家介绍了快速排序(Quicksort),有很多同学会问:快排是不是比之前几种排序都要快?它到底有多快?,那就让我们一起来做个小实验测试一下吧! 一.实验设计 目前给大家介绍过了6种排序:冒泡排 ...
- c语言数字排列和算法思路,冒泡排序、快速排序算法理解及C程序实现
前言:关于 快速排序算法的相关理解,本文借鉴了 啊哈磊 老师的<常用排序--快速排序> ,在此向作者 致敬,写的挺好. 目录 一.冒泡排序 二.快速排序 三.小结 一.冒泡排序 冒泡排序是 ...
- 如何通俗理解并快速写出麦克斯韦方程组?
引言 所谓"当初电磁学的烂,原理用时火葬场",哈?你问我说快速写出麦克斯韦方程组除了研究生复试时还能有啥用又不是小学生?这种圣经你光电学生不得烂熟于心关键时刻装逼用吗?ヽ(`Д´) ...
- 快速排序-java版(快排)
算法本质 快排属于交换排序,快排的基本思想是基于分治的.快排的本质就是通过一趟排序将基准数排到最终的位置.即以基准数为中心将待排序的序列划分成两个子序列,一个子序列是基准数前面的数,都比基准数小:一个 ...
- scala java抽象理解_Scala - 抽象类型和隐式参数解析
我正在使用Scala 2.10.4 . 请详细说明一下 - 实际的代码深深地嵌入了一个复杂的程序中,所以我不会解释这个问题,而是以时间的方式抽象出问题来讨论动物;-) 在scala我有两个特征 - 例 ...
- 快速排序算法理解-python
https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) 目录 快速排序定义 ...
- scala java抽象理解_Scala学习笔记(五) 抽象类以及类中的一些语法糖
1. 抽象类 Scala 的抽象类跟Java的一样,不能被实例化. 1.1抽象字段 抽象类中,变量不使用就无需初始化,可以等到子类继承时再进行初始化. scala> abstract class ...
- scala java抽象理解_scala – 抽象覆盖如何在Java代码方面起作用?
它来了: 它简短,抽象覆盖def m()允许从方法调用super.m()并且当一个特征在所有其他类型之后混合时,这个超级调用动态地代替类型创建,例如 trait Printer { def print ...
最新文章
- mysql8.0_grant改变-You are not allowed to create a user with GRANT
- Objective-C 入门(七)协议 protocol(JAVA中的接口)
- python turtle循环图案-Python绘图Turtle库详解
- PMCAFF | 锤子科技产品经理朱萧木介绍 Smartisan OS 2.0 语音搜索功能
- 从堆里找回“丢失”的代码相关命令简介
- linux下编译openjdk7,Ubuntu 14.04.3 64位环境下OpenJDK7编译
- JVM JRE JDK,这些东西到底是什么?(转载)
- Maven右边栏红色,omitted for duplicate 而且Failed to execute goal on project xxx-service: Could not resolve
- JS 打印 data数据_小程序导出数据到excel表
- 【报告分享】2019Q3短视频KOL红人季度深度分析.pdf
- 倪光南、求伯君“出山”:爱解 Bug、无惧“35岁魔咒”、编码之路痛并快乐!
- 三层交换机VLAN间路由
- Android Add new target
- GoEasy使用方法记录
- 很多人觉得FPGA难学,因为他们没总结出数电的尽头是模电!
- 云计算和python哪个好就业_盘点linux云计算就业方向
- windows下远程连接Mysql
- Django admin修改app名称
- python数据分析的交叉分析和分组分析 -第三次笔记
- 一台云服务器可以干什么?