java实现分治法查找中位数
一、问题描述
输入任意一串数字,输出这个数字串的中位数(如果数字个数为偶数,则输出中间lian两个数的平均值)。
二、实验代码
import java.lang.reflect.Array;
import java.util.Scanner;
public class fenzhi_Median {
static int Partition(int r[], int first, int end) //划分
{
int i = first, j = end; //初始化待划分区间
while (i < j)
{
while (i < j && r[i] <= r[j]) j--; //右侧扫描
if (i < j) {
int temp = r[i]; r[i] = r[j]; r[j] = temp; //将较小记录交换到前面
i++;
}
while (i < j && r[i] <= r[j]) i++; //左侧扫描
if (i < j) {
int temp = r[i]; r[i] = r[j]; r[j] = temp; //将较大记录交换到后面
j--;
}
}
return i; // 返回轴值记录的位置
}
//快速排序
static void QuickSort(int r[], int first, int end) { //快速排序
int pivot;
if (first < end) {
pivot = Partition(r, first, end); //划分,pivot是轴值在序列中的位置
QuickSort(r, first, pivot - 1); //求解子问题1,对左侧子序列进行快速排序
QuickSort(r, pivot + 1, end); //求解子问题2,对右侧子序列进行快速排序
}
}
static double GetMid(int r[], int n)
{
//如果元素个数为偶数个,则为中间两个数 平均数
if (n % 2 == 1)
return (r[(n+1)/ 2] + r[(n-1)/ 2 ]) / 2.0;
//为奇数,则中间数
else
return (double)r[n / 2];
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int abc;
//生成随机数并且存入数组
Scanner scanner = new Scanner(System.in);
int[] list = new int[scanner.nextInt()];
int [] lsit1;
for(int i = 0 ; i <list.length;i++){
list[i] = (int)(Math.random() * (99-1) + 1);
}
//输出list的值
for(int i:list){
System.out.print(i+" ");
}
System.out.println();
//
for(int i:list){
System.out.print(i+" ");
}
QuickSort(list, 0, list.length-1);
System.out.println();
for(int i:list){
System.out.print(i+" ");
}
System.out.print( GetMid(list, list.length-1));
}
}
C/C++ 实现链接
https://blog.csdn.net/cxh_1231/article/details/83061422?utm_medium=distribute.pc_relevant_download.none-task-blog-blogcommendfrombaidu-3.nonecase&depth_1-utm_source=distribute.pc_relevant_download.none-task-blog-blogcommendfrombaidu-3.nonecas