VR引擎程序设计基础——C#第五课

96 阅读2分钟

1.jpg

一、冒泡排序

  1. 有一组杂乱的数据,要求从小到大进行排序,这时候我们可以从下标为0的元素开始,相邻两两进行比对,如果前一个元素比后一个元素大则将前一个元素和后一个元素交换值,经过第一轮比对后,我们可以知道最后一个元素一定是数组中最大的值,接下来再比对前n-1个元素,以此类推每次都会得到一个最大值,最后数组就从小到大进行排序了。

image.png

  1. 使用Array.Sort(数组名)对数组进行排序

image.png

二、练习题

  1. 练习题一

image.png

image.png 2. 练习题二

image.png

  1. 练习三判断回文串

image.png

            //判断一个字符串是不是回文串   le-v-el   奇数   偶数
            //判断一个字符串是不是回文串   思路:“去一半判断前几个字符是不是和后几个字符一一对应”
            /*
            string str =Console.ReadLine();
            bool res = true;
            for (int i= 0; i < str.Length/2; i++)
            {
                if(str[i] != str[str.Length - 1 - i]) { res = false;}
            }
            Console.WriteLine(res?$"是回文串{str}":$"不是回文串{str}");//$表示字符串的格式化输出,大括号中表示变量名
            */
  1. 练习四 连续最低气温天数判断

image.png

image.png

            //需要有一个变量来记录最长连续下降的天数,另外一个变量来记录每一次连续下降温度的天数
            //输入内容
            string tempStr =Console.ReadLine().Split(' ')[0];
            int[] intArray = new int[tempStr.Length];
            for (int i = 0; i < tempStr.Length; i++)
            {
                intArray[i] = Convert.ToInt32(tempStr[i]);
            }
            int maxDay = 1;
            int count = 1;
            for (int i = 1; i < intArray.Length; i++)
            {
                //如果当前的数比前面的数要大,那么下降就中断了   一旦中断了我们就要记录当前连续天数和最大的连续天数进行比对
                if (intArray[i] >= intArray[i - 1])
                //34 23 43 23 10 什么情况西安u我们去记录的最大值  后面有一个比它大的才会记录最大值
                {
                    count = 1;
                    if (count > maxDay) maxDay = count;
                    continue;
                }
                count++;
            }
            maxDay = count>maxDay ?count : maxDay;//比最后一个
            Console.WriteLine(maxDay);
  1. 练习五 给定一串只包含小写字母的字符串,计算每个字母在字符串中出现的次数,然后输出只出现2次的字母的个数

image.png

  1. 练习六

image.png

image.png

image.png

2.jpg

三、本节课源码

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

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //循环   冒泡排序   对一组杂乱的数据进行从小到大排序
            //1   14   23    43    78   9
            //第一轮比对完之后  确定了一个最大的数,已经确定的数就不用比对了
            //{n-已经比对的数(轮数[当前轮数-1])}
            //1   14   23     43    9    78
            //以后每一轮比对都确定一个最大数,总共要比对多少轮 ?——(n-1)轮
            //1   14   23      9    43   78 


            //先来一个数组
            /*
            int [] intArray= new int []  { 14, 1, 9, 23, 78, 43};
            
            for (int i =1; i< intArray.Length; i++)//总的比对轮数
            {
                for (int j = 0; j < intArray.Length-i;j++) //intArray.Length - 1 - (i - 1) - 1
                // Length - 1  [下标]  (i - 1) [ 上一轮确定的轮数(比对一轮-1)]  -1  [往前排一位]
                {
                    if (intArray[j] > intArray[j+1])
                    {
                        //进行值的交换   使用中间变量
                        int middle = intArray[j];
                        intArray[j] = intArray[j+1];
                        intArray[j+1] = middle;
                    }
                }
            }           
            Console.WriteLine(String.Join(" ", intArray));
           */

            /*
            int[] intArray = new int[] { 14, 1, 9, 23, 78, 43 };
            Array.Sort(intArray);//排序     会改变原来的数组
            Console.WriteLine(String.Join(" ", intArray));
            */

            //练习一
            // 1  3   5   7  插入一个  4
            //首先要找到插入的索引位置
            //输入一组数据
           string str = Convert.ToString(Console.ReadLine());
            
            //用空格隔开的数据
            string[] strArray = str.Split(" ");
            int[] intArray1 = new int[strArray.Length];
            for (int i = 0; i < intArray1.Length; i++)
            {
                intArray1[i] = Convert.ToInt32(strArray[i]);
            }
            Array.Sort(intArray1);
            //找到要插入的下标位置     1   3    4    5    7 
            int m = 0;
            //输入一个值
            int num =Convert.ToInt32(Console.ReadLine());
            for (int i = 0; i < intArray1.Length-1; i++)
            {
                if (intArray1[i] <= num && num <= intArray1[i+1])
                {
                    m = i+1;
                }
            }
            //判断是不是比最后一个数
            if (num >= intArray1[intArray1.Length - 1]) m = intArray1.Length;
            //创建新的数组
            int[] newArray=new int[intArray1.Length+1];
            for (int i = 0; i < m; i++)
            {
                newArray[i] = intArray1[i];
            }
            //第m项
            newArray[m] = num;
            //m+1到最后
            for (int i =m+1;i<newArray.Length; i++)
            {
                newArray[i]= intArray1[i-1];
            }
            Console.WriteLine(String.Join(" ",newArray));
        }
    }
}

3.jpg