C#基础[数组,选择排序,折半查找]

数组

数组的定义
概念:同一种类型数据的集合 其实数组就是一个容器

数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些元素

格式:
在这里插入图片描述
练习:

int[] arr = new int[] { 1, 2, 3 };
        for(int x=0; x< arr.Length;x++)//小于数组的长度时 自增加
        {
            Debug.Log(arr[x]);//在控制台输出信息
        }

结果:
在这里插入图片描述
获取最值
获取最大值

void Start () {
        int[] arr = new int[] { 1, 10, 9, 4, 5, 6, 7, 6 };//数组的范围
        GetMax(arr);//获取到这个函数的数组
	}
public void GetMax(int[] arr)//创建新函数
    {
        int temp = arr[0];
        for (int i = 1; i < arr.Length;i++)//当小于数组的长度时 自增加
        {
            
            if(arr[i]>temp)//判断是否后面的数大于temp
            {
                temp = arr[i];//大于的话 就赋值给temp 继续循环判断
            }
        Debug.Log("最大值是:" + temp);
        }
     }

结果:
在这里插入图片描述

获取最小值
与获取最大值方法类似
引用这个函数就好了

public void GetMin(int[] arr)
    {
        int temp = 0;
        for (int i = 1; i < arr.Length; i++)//当小于数组的长度时 自增加
        {

            if (arr[i] < temp)//判断是否后面的数大于temp
            {
                temp = i;//大于的话 就赋值给temp 继续循环判断
            }
            Debug.Log("最小值是:" + arr[temp] + "下标是:" + temp);
        }
    }

并且这个函数可以出现数组的下标

选择排序

原理
数组里的第一个数 与 后面的数依次对比
最小(或最大)放前面 一轮一轮对比过去
直到全部待排序的数排完

在这里插入图片描述
练习:

void Start () {
        int[] arr2 = new int[] { 5, 8, 4, 3, 6, 9, 7 };
        SelectSort(arr2);

	}
  public void SelectSort(int[] arr)//选择排序函数 传一个数组回来
    {
        for (int i = 0; i < arr.Length; i++)//控制第几次排序
        {
            for (int j = i + 1; j < arr.Length; j++)//控制第i次排序 里需要比较几回
            {
                int temp = 0;
                if (arr[i] > arr[j])//如果大于被比较的数话 就对换位置
                {
                    temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        Ergodic(arr);
    }

    

    public void Ergodic(int[] arr)//遍历数组 把数组中的每个元素都访问到
    {
        for(int i=0;i<arr.Length;i++)
        {
            Debug.Log(arr[i]);//在控制台显示出来
        }
    }

结果:
在这里插入图片描述

折半查找

原理:
搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半
在这里插入图片描述

练习:

void Start () {
        int[] arr4 = new int[] { 2, 3, 4, 5, 6, 7, 8, 9 };
        int key = 8;
        int x = Reduce(arr4, key);//引用这个函数 并输入8
        if (x >= 0)
        {
            Debug.Log(key + "存在于arr4" +",角标是:" + x);
        }

	}

    public int Reduce(int[] arr,int key)//折半查找 key是输入数字
    {
        int min = 0;//最小的下标等于0
        int max = arr.Length - 1;//最大的下标 等于数组的长度减1
        int mid = 0;//中间的下标
        while(min <= max)//满足最小下标小于等于最大下标时
        {
            mid = (min + max) / 2;

            if(key < arr[mid])//输入的数小于中间的下标
            {
                max = mid - 1;
            }
            else if(key > arr[mid])//输入的数大于中间的下标
            {
                min = mid + 1;
            }
            else
            {
                return mid;
            }
        }
        return -1;//代表没找到
    }

结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值