【华东野鸡大学-软件学院-08届】----二分对调排序,有注释符没有显示出来

【忠告】:1.记好了,大家上大学千万别【和鸡疯】!   

                         【腹蛋】抓了好几个学生了!!!

                   2.抓学生有用吗????【妓院】【院长】却没被【靠】!不是,打错字了,是【没                             被铐】,【靠你大爷的】!!!
————————————————

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 双选择排序
{
    class Program
    {
  
        static void Main(string[] args)
        {
            Random ra = new Random();
            int[] entry = new int[50];
            Console.WriteLine("未排序:");
            for (int i = 0; i < entry.Length; i++)
            {
               
                entry[i] = ra.Next(0, entry.Length);
                Console.Write("    " + entry[i]);
                if ((i+1)% 10 == 0)
                    Console.WriteLine("");
            }
           
            //双选择排序(0, entry.Length-1, entry);
            二分对调(0, entry.Length - 1, entry);
          
            Console.WriteLine("----------------已排序-----------------------------");
            for (int i = 0; i < entry.Length; i++)
            {

               
                Console.Write("    "+entry[i]);
                if ((i+1)% 10 == 0)
                    Console.WriteLine("");
            }
            Console.ReadLine();
        }

        static void print(int[] entry, int n)
        {
            for (int i = 0; i < n; i++)
            {


                Console.WriteLine(entry[i]);
            }
        }
        /// <summary>
        /// ///
        /// </summary>
        /// <param name="start"></param>
        /// <param name="end"></param>
        /// <param name="entry"></param>
        /// 【【【【【【【【关键函数】】】】】】】】】
        //【递归】:1.进入函数时,分割成左右两半,【算法思想】:使【右边的数】都比【左边的数】【大】【这样就可以了】
        static void 二分对调(int start, int end, int[] entry)
        {
            if(end-start>1)//【当前数段】个数为2个以上时
            {
                int mid=(start+end)/2;//分割点
                int l_max_index=0;//左半最大值的下标
                int r_max_index = 0;//右半最大值的下标
                int r_min_index = 0;//右半最小值的下标
               /* if(Max(start,mid,entry,ref l_max_index)>Max(mid+1,end,entry,ref r_max_index))///左半的最大值>右半的最大值
                    swap(l_max_index,r_max_index,entry);//进行对调

                *这个多余的。。
                while(Max(start,mid,entry,ref l_max_index)>Min(mid+1,end,entry,ref r_min_index))/【关键】左半的最大值>右半的最小值时,进行对调
                    swap(l_max_index,r_min_index,entry);
                二分对调(start,mid,entry);///【使用递归】对左半部分进行操作
                二分对调(mid + 1, end, entry);///【使用递归】对右半部分进行操作
            }
            else if(end-start==1)//【结束点】【当前数段】个数为2个时
            {
                if(entry[end]<entry[start])
                    swap(end,start,entry);
            }
            else【结束点】【当前数段】只有一个数时
                return;
        }


        static int Max(int start, int end, int[] entry, ref int max_index)///数组的[start,end]数段中的最大值
        {
            max_index = start;
            for (int i = start; i <= end; i++)
            {
                if (entry[i] > entry[max_index])
                    max_index = i;
            }
            return entry[max_index];

        }

        static int Min(int start, int end, int[] entry, ref int min_index)///数组的[start,end]数段中的最大值
        {
            min_index = start;
            for (int i = start; i <= end; i++)
            {
                if (entry[i] <entry[min_index])
                    min_index = i;
            }
            return entry[min_index];

        }

        static void swap(int a, int b, int[] entry)///交换数组中下标为a和b的两个数
                                                   ///
        {
            if (a != b)
            {
                int temp;
                temp = entry[a];
                entry[a] = entry[b];
                entry[b] = temp;
            }
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值