基础算法-快速排序
2017-02-23 19:05
218 查看
快速排序
选择一个基准值x,把比x小的全部放在左边,把大于等于x的值放在右边,然后把x放到这个边界.这样,如果左边是升序的,那么因为x比左边的都大,左边区间加上x 的这个区间同样是升序的,如果此时右边也是升序的,
那么因为x的值小于等于右边的值,则整个数组是升序的
而每个区间的排序,可以递归调用快速排序完成,如果区间只有一个值就不用排序了。
public class QuickSort { public static void quickSort(int a[],int l,int r){ if(l<r){//递归出口 int i=l,j=r,x=a[i];//选定第一个元素为基准 while (i<j){ while (i<j&&a[j]>=x)//第一个小于x的值 j--; if(i<j) a[i++]=a[j];//小于x的值全部放在左边 (i++好像也没有必要, // 因为到下面的话,这个值肯定是小于x的,再下面的那个while 中自然会+1 while (i<j&&a[i]<x)//第一个大于等于x的值 i++; if(i<j) a[j--]=a[i];//大于等于x的值全部放在右边,(j--同样也没有什么必要) } a[i]=x;//正好停留的位置为左边小于x,右边大于等于x quickSort(a,l,i-1);//递归快排左边 quickSort(a,i+1,r);//递归快排右边 } } public static void main(String[]args){ int a[]=new int[100]; SortUtil.randomArray(a); SortUtil.print(a); quickSort(a,0,a.length-1); SortUtil.print(a); } }
相关文章推荐
- 算法基础之排序篇-快速排序
- 基础算法2——冒泡排序和快速排序
- 基础算法 快速排序
- 算法基础 快速排序
- 算法基础4:快速排序(随机化版本)
- 中级程序员必须懂的20大基础算法(1)——快速排序
- [算法基础]快速排序
- java基础算法-快速排序
- 【计蒜客】基础算法入门之快速排序
- 基础算法(三)---快速排序(Java)
- 基础排序算法之快速排序(Quick Sort)
- 基础算法之排序--快速排序
- php四种基础算法:冒泡,选择,插入和快速排序法
- 基础算法之快速排序
- 基础算法的总结之快速排序
- 算法基础(3)分治策略之快速排序
- 基础算法(2):快速排序(随机划分+三数取中划分+ 随机三数取中划分+尾递归)
- 【基础算法】排序-复杂排序之二(快速排序)
- 基础算法----快速排序
- 算法基础之排序—快速排序