活跃农民
- 积分
- 416
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2016-5-22
- 最后登录
- 1970-1-1
|
- public static float findMedian(int []arr){
- if(arr.length %2 != 0){
- return odd(arr, 0, arr.length-1);
- }else{
- return even(arr, 0, arr.length-1);
- }
- }
- public static float odd(int []arr,int start ,int end){
- int pivot = Partition(arr,start,end);
- if(start < arr.length/2){
- return odd(arr, pivot+1, end);
- }
- if(start > arr.length/2){
- return odd(arr, start, pivot-1);
- }else return arr[pivot];
- }
- public static float even(int []arr,int start ,int end){
- if(start > end){
- return (arr[arr.length/2]+arr[arr.length/2-1])/2;
- }
- int pivot = Partition(arr,start,end);
- if(start <= arr.length/2-1) {
- return even(arr, pivot + 1, end);
- } else{
- return odd(arr, start, pivot-1);
- }
- }
- public void quicksort(int []arr,int start ,int end){
- if(start < end){
- int index = Partition(arr,start,end);
- quicksort(arr, start, index-1);
- quicksort(arr,index, end-1);
- }
- }
- public static int Partition(int []arr, int start, int end){
- int pivot = arr[start];
- while(start < end){
- while(start < end && pivot < arr[end] ){
- end--;
- }
- arr[start] = arr[end];
- while( start < end && arr[start]<= pivot ){
- start++;
- }
- arr[end] = arr[start];
- }
- arr[start] = pivot;
- return start;
- }
复制代码
补充内容 (2018-11-18 00:52):
大概这样?lz |
|