java实现分治法查找中位数

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值