快速排序+随机快速排序
2018-02-04 10:52
399 查看
public class Main { /** * @param args */ //随机快速排序 //原理 不断的将一个基准左右有序 然后返回基准的左右下标 public static void main(String[] args) { // TODO Auto-generated method stub int[] arr = {0, -4, -1, 6, 8, 8, 53, 15}; RandomquickSort(arr,0,arr.length-1); System.out.println(Arrays.toString(arr)); } public static void quickSort(int[] arr,int L,int R){ if(L<R){ //随机的话默认以最后一个数为基准递归下去 int[] p = partition(arr,L,R); quickSort(arr,L,p[0]); quickSort(arr,p[1],R); } } //随机快速排序 从 R-L中找一个随机位置 交换到最后 public static void RandomquickSort(int[] arr,int L,int R){ if(L<R){ swap(arr,R,(int)(Math.random()*(R-L))+1); int[] p = partition(arr,L,R); quickSort(arr,L,p[0]); quickSort(arr,p[1],R); } } //默认以最后一个数为基准 public static int[] partition(int[] arr,int L,int R){ int left = L-1; int right = R; while(L<right){ if(arr[L]<arr[R]){ swap(arr,L++,++left); }else if(arr[L]>arr[R]){ swap(arr,L,--right); }else{ L++; } } //将最后那个基准 与 右边范围第一个数交换 ----寓意交换到中间 swap(arr,right,R); //不建议使用 L++ 因为到最后会不知道left的正确值 return new int[]{left,right+1};//返回的是刚好能把数组分成两半的值 } public static void swap(int[] a,int i,int j){ int temp = a[i]; a[i] = a[j]; a[j]=temp; } }
相关文章推荐
- C/C++实现快速排序和随机快速排序
- 算法导论 第七章快速排序与随机快速排序
- 算法导论 第七章快速排序与随机快速排序
- 快速排序和随机快速排序
- 普通快速排序与随机快速排序
- 《github一天一道算法题》:快速排序和随机快速排序
- 算法导论 第七章快速排序与随机快速排序
- java实现快速排序和随机快速排序
- 快速排序/随机快速排序
- 《算法之美》---快速排序(随机快速排序)
- 快速排序的算法思想及Python版快速排序的实现示例
- 快速排序随机初始基准数
- 快速排序及三向切分快速排序
- 排序总结JS版(冒泡排序、简单选择排序、快速插入排序、希尔排序、堆排序、快速排序)
- 算法导论 第七章 随机快速排序
- 随机快速排序
- 【算法设计-快速排序】随机快速排序算法
- STL sort 函数实现详解 作者:fengcc 原创作品 转载请注明出处 前几天阿里电话一面,被问到STL中sort函数的实现。以前没有仔细探究过,听人说是快速排序,于是回答说用快速排序实现的
- 快速排序 & 随机数的生成方法 & 随机快排