快速排序思想找出中位数

    class Program
    {


        static void Main(string[] args)
        {


            int[] arr = arrInsert(100000000);
            double mid = medium(arr, arr.Length-1);



            Console.Write(mid);

            Console.ReadKey();
        }

        static  int quick_sort(int[] a ,int left,int right)
        {
            if(left>right)
            {
                return 0;
            }    
            int i,j,t,key;
            key=a[left];
            i=left;
            j=right;
            while(i!=j)
            {
                while(i<j&&a[j]>=key)
                {
                  j--;
                }
       
                while(i<j&&a[i]<=key)
                {
                    i++;
                }
                if(i<j)
                {
                    t=a[i];
                    a[i]=a[j];
                    a[j]=t;
                }
            }
            a[left]=a[i];
            a[i]=key;
            return i;
        }
    static  double medium(int[] a,int n)
    {
        int left=0;
        int right=n;
        int mid=(left+right)/2;
        int num;
        while(true)
        {
            num=quick_sort(a,left,right);
            if(num==mid)
            {
              break;
            }     
            if(num<mid)
            {
              left=num+1;
            }
            if(num>mid)
            {
              right=num-1;
            }     
        }
        return (n%2==0)?a[mid]:(double)(a[mid]+a[mid+1])/2;
    }


    static int[] arrInsert(int count)
    {
        int[] arr = new int[count];
        Random r1 = new Random();
        int i = 0;
        while (i < count)
        {
            int num = r1.Next(0, 10000);
            arr[i] = num;
            i++;
        }
        return arr;
    }

   
    }

 

posted on 2019-04-18 16:48 天然灰 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/tianranhui/p/10730661.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值