12月28 数组的几种应用(冒泡、折半查找)

*************数组的应用*************

一、冒泡排序(升序、降序)

 1、双层循环(循环套循环)

(1).冒泡排序是用双层循环解决。外层循环的是趟数,里层循环的是次数
(2).趟数=n-1;次数=n-趟数。
(3).里层循环使用if比较相临的两个数的大小,进行数值交换。

打分:(去掉两个最高分,去掉两个最低分)

 static void Main(string[] args)
        {
            int[] a = new int[10]{ 10, 12, 6, 9, 5, 4, 3, 17, 1, 15 };
            int i, j, temp = 0,sum=0;
            double avg = 0.0;
            //冒泡排序
            for (i = 1; i < a.Length; i++)
            {
                for (j = 1; j <= a.Length - i; j++)
                {
                    if (a[j - 1] < a[j])
                    {
                        temp = a[j];
                        a[j] = a[j - 1];
                        a[j - 1] = temp;
                    }
                }
            }
            Console.WriteLine("去掉两个最高分,去掉两个最低分后分别得:");
            for (i = 2; i <= a.Length - 3; i++)
            {
                Console.Write(a[i] + "");
                sum += a[i];
            }
            Console.WriteLine();
            avg = 1.0 * sum / (a.Length - 4);
            Console.WriteLine("得分总和为"+sum + "分。	");
            Console.WriteLine("平均分为"+avg + "分。	");
        }

二、折半查找(也叫二分法)

1、前提:数组必须有序。

2、主要就是3个未知量。

顶部:topsub

底部:bottomsub

中间:midsub =(topsub+bottomsub)/2

将数组一分为二,然后拿需要查找的数与midsub作比较,如果比midsub大,则舍弃上半部分,然后将下半部分一分为二,找到midsub再做比较,以此类推,直到找到为止。

static void Main(string[] args)
        {
            int[] a = new int[8] { 3 ,4, 5, 7, 8 ,9, 12,14};
            int top = 0, bottom = a.Length - 1, mid;
            

            Console.Write ("请输入一个数字");
            int n=Convert.ToInt32(Console.ReadLine());
            //折半查找
            while (bottom >= top)
            { 
                mid=(bottom+top)/2;
                if (a[mid] < n)
                {
                    top = mid + 1;
                }
                else if (a[mid] > n)
                {
                    bottom = mid - 1;
                }
                else 
                {
                    Console.Write("找到了,在第"+(mid+1)+"个元素上");
                    break;
                }
            
            }
        }

其实筛选有更简单的方法:在数组a中,a.where();筛选   a.OrderBy();排序

原文地址:https://www.cnblogs.com/tzq9308/p/4190831.html