[算法] Quick Sort
2015-08-30 14:08
453 查看
Quick Sort
下面是快速排序的递归实现。
快速排序的一个问题是,可能面临退化的现象,也就是数据已经是排好序的,应对策略是对于第一个元素,即pivot的选择使用随机策略。
对于快速排序的非递归实现可参考[2]
kth largest element in an array 使用了类似快速排序的算法,可以参考[3]
[1] /article/1422487.html
[2] /article/6580010.html
[3] /article/6579946.html
下面是快速排序的递归实现。
快速排序的一个问题是,可能面临退化的现象,也就是数据已经是排好序的,应对策略是对于第一个元素,即pivot的选择使用随机策略。
public class QuickSort { public QuickSort(){ } private int getMiddle(int []data,int start,int end){ int left = start; int right = end; int pivot = data[left]; while(left<right){ while(left<right&&data[right]>=pivot) right--; data[left]=data[right]; while(left<right&&data[left]<pivot) left++; data[right]=data[left]; } data[left]=pivot; return left; } public void sort(int [] data,int start, int end){ if(start>=end) return; int index = (int)((end - start +1)*Math.random());//尽量减少退化现象的出现 //swap the data in start and (index+start) int tmp = data[start]; data[start]= data[index+start]; data[index+start]=tmp; int mid = getMiddle(data,start,end); sort(data,start,mid-1); sort(data,mid+1,end); } public static void main(String[] args) { // TODO Auto-generated method stub } }
对于快速排序的非递归实现可参考[2]
kth largest element in an array 使用了类似快速排序的算法,可以参考[3]
[1] /article/1422487.html
[2] /article/6580010.html
[3] /article/6579946.html
相关文章推荐
- iOS开发笔记1-UINavigationController
- UVa 1608:Non-boring swquences(分治)
- CEGUI编译
- EasyUI常用控件禁用方法
- UIimage View
- UIButton状态:添加图片:
- 剖析安卓build系统的设计思想以及案例模拟
- iphone开发之表格组件UITableView的使用(二)如何分组展示数据并添加组头和组尾描述
- easyui使用mergeCells合并单元格后第一行行高过大
- iOS开发 - UIAlertController 弹框提醒
- 考评系统学到的UI设计理念
- UIWindow和UIView
- UI设计规范
- iOS8新特性(2)——UIPopoverController和UIPresentationController
- iOS8新特性(1)——UIAlertController
- 编写广播时出现Exported receiver does not require permission
- 学习YUI.Ext 第一天:EXT简介(一)
- HOWTO: Install, Build and Use openCV (MacOSX 10.10)
- POJ 2524 Ubiquitous Religions(宗教种类:并差集)
- adbd cannot run as root in production builds