Android程序员必备-数据结构与算法之快速排序(二)
来源:互联网 发布:matlab求海森矩阵 编辑:程序博客网 时间:2024/05/16 10:38
昨天了解了快速排序的基本思路,并对一组无序数列进行了快速排序,今天将学习用快速排序编写一段java程序,这也是学习算法的根本目的,就是解决一个问题,下面标出代码:
public void change(Object[] r,int low,int high){ int temp = r[low]; while(low < high){ while(low < high && strategy.compare(r[high],temp) >= 0 ) high--; r[low] = r[high]; while(low < high && strategy.compare(r[low],temp) <= 0 ) low++; r[high] = r[low]; } r[low] = temp; return low; } public void quickSort(Object[] r,int low,int high){ if(low < high){ int p = change(r,low,high); change(r,low,p-1); change(r,p+1,high); } }
快速排序的复杂度分析:
1.时间复杂度
快速排序算法的运行时间依赖于划分是否平衡,根据基准数元素将序列划分为两个子序列中的元素个数,而划分是否平衡还依赖于所使用的枢纽元素。
最坏情况:所得到的子序列中一个子序列为空,相当于冒泡排序,每一次都有一个元素在一边,n-1的元素在另一边,此时的时间复杂度为o(n的平方)。
最好情况:每次排序的基准数恰巧在中间,恰巧左侧和右侧的元素一样多,此时的时间复杂度公式则为:T[n] = 2T[n/2] + f(n),T[n/2]为平分后的子数组的时间复杂度,f[n] 为平分这个数组时所花的时间,下面为最优情况下的时间复杂度分析:
参考自:http://blog.csdn.net/yuzhihui_no1/article/details/44198701,在此表示感谢!!
2.空间复杂度
快速排序算法需要一个堆栈来实现递归,若每次划分都将序列均匀分隔为长度相近的两个子序列,则堆栈的最大深度为log n,但是,最坏情况下,堆栈的最大深度则是n。
1 0
- Android程序员必备-数据结构与算法之快速排序(二)
- Android程序员必备-数据结构与算法之快速排序(一)
- Android程序员必备-数据结构与算法之冒泡排序
- 【算法与数据结构必备】PHP常用排序算法:冒泡,快速排序,插入排序(一维数组)
- 数据结构与算法之快速排序
- 数据结构与算法之快速排序
- 简述数据结构与算法之快速排序
- 数据结构与算法之---快速排序
- 数据结构与算法之快速排序
- Javascript数据结构算法之排序二(希尔排序,归并排序,快速排序)
- 程序员面试宝典之数据结构基础----排序之快速排序(简单快速排序与改进快速排序)总结
- 【数据结构】排序算法(二)之交换排序之快速排序(QuickSort)
- 【数据结构与算法】排序算法之六:快速排序
- 数据结构与算法之二冒泡排序
- 数据结构与算法之二 排序
- 数据结构与算法之七(划分算法与快速排序)
- 算法与数据结构(一)--快速排序
- 考研数据结构与算法之排序专题一 快速排序
- 数据库中schema与catalog简介
- Android学习笔记1.1
- 【CodeForces 525D】【dfs+思维】 Arthur and Walls 【只包含点和星的矩阵,需要将部分星变成点使点能组成矩形 】
- HDU 2215 Maple trees (凸包 最小圆覆盖 推荐)
- 关于网狐棋牌的数据库
- Android程序员必备-数据结构与算法之快速排序(二)
- Android 多渠道打包
- jeesite 批量添加数据
- Java Web:更改web.xml默认欢迎页面
- VS无法读取easyui中datagrid组件的json文件问题
- leetcode解题报告:75. Sort Colors
- oracle基础教程(第一天)
- mysql中的日期格式转换
- 智慧北京:引导页面数据的缓存跳转