排序之 快排
来源:互联网 发布:ipad刷机软件 编辑:程序博客网 时间:2024/06/09 19:00
排序之 快排
序言
快速排序是常用的排序算法之一,也是面试的时候经常会问到的,它是冒泡排序的改进,不稳定,时间复杂度 最理想 O(nlogn) 最差时间O(n^2),采用了 挖坑法+分治法
基本思想
它的基本思想是通过一趟扫描后,使得排序序列的长度能大幅度地减少。在冒泡排序中,一次扫描只能确保最大数值的数移到正确位置,而待排序序列的长度可能只减少1。快速排序通过一趟扫描,就能确保某个数(以它为基准点吧)的左边各数都比它小,右边各数都比它大。然后又用同样的方法处理它左右两边的数,直到基准点的左右只有一个元素为止。简单来说就是执行以步骤:
(数组a[],low是头部下标,high是尾部下标,temp是基数)
- 寻找一个基数(通常是第一个数)
- 先从数组的最尾部开始比较,如果a[high]>=temp,往前移位继续比较,如果小,就执行 a[low]=a[high],然后从a[low]开始比较,执行a[low]<=temp,如果下于,则low++继续比较,如果大于的话,a[high]=a[low];
- 执行完2以后,low就是基数的下标,然后a[low]=temp,
- 然后从基数的下标分位 a[low],middle-1 ,middel+1,a[high] 继续执行2,3 步骤,如果low>=high不成立,则f返回排序的结果。
从上面步骤可以看出来,快排的效率取决去基数的选择,最理想的情况就是基数正好就是中间数。
代码实现
`
public class QuickSort{public void quick(int [] a){ if(a.length>0){ quickSort(a,0,a.length-1); }}public void quickSort(int [] a, int low, int heih){ if(low<high){ int middle=getMiddle(a,low,high); quickSort(a,low,middle-1); quickSort(a,middle+1,high); }}public int getMiddle(int [] a,int low ,int high){ int temp=a[low];基准元素 while(low<high){ while(low<hight&&a[high]>=temp){ hihgh--; } a[low]=a[high]; while(low<high&&a[low]<=temp){ low++; } a[high]=a[low]; } a[low]=temp; return low;}}
`
快速排序还有很多改进版本,如随机选择基准数,区间内数据较少时直接用另的方法排序以减小递归深度。有兴趣的同学可以深入研究研究,,
0 0
- 排序 之 快排
- 排序之 快排
- 排序之-----快排
- 排序之快排
- 排序之快排
- 单链表排序之快排
- 排序算法之快排
- 排序讲解之快排
- java排序之快排
- 八大排序之快排
- 排序算法之快排
- 排序算法之快排
- 排序算法之快排
- 排序之快排qsort
- 经典排序 之 快排
- 排序算法之快排
- 排序算法之快排
- 常用排序之快排
- 如何完全删除MySQL数据库,实现重装
- struts里面值栈valuestack和上下文contextMap的理解和使用
- 大神手把手教你Java性能优化-江南白衣(加强版)
- Android app 优化
- (2)行列式的性质
- 排序之 快排
- 开发之保存用户的登陆密码
- 数据结构之顺序表3(顺序表的创建、插入、删除········)
- JavaWeb:JDBC之数据库连接池
- CI框架,多域名实现
- Mac(Android)集成ffmpeg/x264:ERROR: libx264 not found的问题
- selenium用java代码写,运行不报错,但是页面出不来
- webview不显示图片
- linux C学习第二天之应用编程和网络编程笔记(上)